1. 程式人生 > >深度優先遍歷(鄰接矩陣)

深度優先遍歷(鄰接矩陣)

Problem Description
無向連通圖的頂點值為字元型且互不相等,採用鄰接矩陣儲存。請從儲存下標為0的頂點開始深度優先遍歷,在選取下一個未被訪問的鄰接點時,優先選擇儲存下標小的頂點,輸出該遍歷序列。
Input
有多組資料,每組第一行為兩個整數n和e,表示n個頂點和e條邊(0<n<=26,0<=e<=325);第二行為n個頂點的值,請按輸入順序從下標0開始儲存;接下來有e行,表示e條邊,每行給出一條邊所依附的兩個頂點的下標i和j,中間用空格隔開。
Output
每組輸出佔一行,輸出滿足題目描述的深度優先遍歷序列。
Sample Input
8 9
ABCDEFGH
0 1
0 2
1 3
1 4
2 5
2 6
3 4
3 7
5 6
Sample Output
ABDEHCFG

#include<iostream>
using namespace std;
int visit[100];
void DNF(char ver[]
		 ,int arc[][100]
		 ,int n,int v)
{
	cout<<ver[v];
    visit[v]=1;
	for(int j=0;j<n;j++)
	{
       if(visit[j]==0
		   && arc[v][j]==1)
	   { DNF(ver,arc,n,j);}
	}
}
int main()
{
    int n,e,i,j,k
		,arc[100][100];
	char ver[100];
	while(cin>>n>>e>>ver)
	{
       for(i=0;i<n;i++)
	   {
		   for(j=0;j<n;j++)
		   {
			   arc[i][j]=0;
		   }
		   visit[i]=0;
	   }
	   for(k=0;k<e;k++)
	   {
		 cin>>i>>j;
		 arc[i][j]=arc[j][i]=1;
	   }
	   DNF(ver,arc,n,0);
	   cout<<endl;
	   
	}
	return 0;
}