深度優先遍歷(鄰接矩陣)
阿新 • • 發佈:2018-12-12
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; }