从点 0到点n,每次进行一次dfs,看是否能把所有的点全部标记,若可以,则为根
#include<iostream> #include<string.h> #define INIT(flag) memset(flag,0,sizeof(flag)) using namespace std; int n; int map[100][100]; int flag[100]; void dfs(int x) { flag[x]=1; for(int i=0;i<n;i++) { if(map[x][i]!=0&&flag[i]==0) dfs(i); } } int main() { cin>>n; for(int i=0;i<n;i++) for(int j=0;j<n;j++) cin>>map[i][j]; int j; for(int i=0;i<n;i++) { INIT(flag); //记得每次一将标记全部取消 dfs(i); for(j=0;j<n;j++) { if(flag[j]==0)break; } if(j==n)cout<<i; } return 0; }