#include<iostream>
//蓝桥第9届 c语言c组第9题
//小朋友的崇拜圈
//有向图找环 dfs
using namespace std;
int map[100][100]={0}; //邻接矩阵
int visit[100]={0}; // 状态数组
int path[100]; //环的元素
int m=0;
int v=30; //点的个数
/*
visit数组表示当前点的状态
0 表示还没访问过
1 表示正在访问
-1 表示访问结束
*/
void dfs(int k){
visit[k]=1;//正在访问
path[m++]=k;
for(int i=1;i<=v;i++){
if(map[k][i]==1){//2个点之间有边
if(visit[i]==0){
dfs(i); //递归去访问
}
if(visit[i]==1){ //出现环 打印出来
cout<<"环:";
for(int j=m-1;;j--){
cout<<path[j]<<' ';
if(path[j]==i)
break;
}
cout<<endl;
}
if(visit[i]==-1)//表示当前点访问过
{
continue;
}
}
}
visit[k]=-1; //访问结束
m--;
}
int main(){
int a[]={22,28,16,6,27,21,30,1,29,10,9,14,24,11,7,2,8,5,26,4,12,3,25,18,20,19,23,17,13,15};
v=30;
for(int i=0;i<v;i++){
map[i+1][a[i]]=1;
}
for(int i=1;i<=v;i++){
if(visit[i]!=-1)
dfs(i);
}
return 0;
}
有向图找环
猜你喜欢
转载自blog.csdn.net/qq_40066334/article/details/86677897
今日推荐
周排行