DFS手工栈
运用栈来处理顺序 的问题
#include<bits/stdc++.h>
using namespace std;
int n,a[50][50];bool bao[50];
void input(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
cin>>a[i][j];
}
}
bool o=0;
void dfs(int da){
int s[50];
int top=1;//不等于0;保证下面while循环能进行;
s[top]=da;
bao[da]=1;
while(top>0){
da=s[top];
if(o)cout<<"--"<<char(da+64);
else cout<<char(da+64);
o=1;
top--;//先出栈
for(int k=1;k<=n;k++){ //搜索有无边
if(a[da][k]==1&&bao[k]==0){
s[++top]=k;//这里是把行数压在里面
bao[k]=1;//标记一下 防止重复
}
}
}
}
int main(){
input();
for(int i=1;i<=n;i++){ //只进行没有被标记过的;如果不联通的话,肯定没有被标记过;
if(!bao[i])
dfs(i);
}
return 0;
}
```数据:
6
0 1 1 0 0 0
1 0 1 1 0 0
1 1 0 1 1 0
0 1 1 0 1 1
0 0 1 1 0 0
0 0 0 1 0 0