赞
踩
#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; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。