拓撲入門 poj2367 Genealogical tree
阿新 • • 發佈:2019-02-02
#include <stdio.h>#include <string.h>int main(){ int d[101];//記錄入度 int vis[101][101];//標記i指向j的邊 int r[101];//記錄結果 int n,m; int i,j; int k,x; while(scanf("%d",&n)==1) { memset(d,0,sizeof(d));//初始化 memset(vis,0,sizeof(vis));//一定要初始化當時就沒有初始化,小細節,一定要注意 for(i=1;i<=n;i++) { while(scanf("%d",&x),x) { vis[i][x]=1;//標記 d[x]++;// 記錄入度 } } for(i=1; i<=n; i++) { for(j=1; j<=n; j++) { if(d[j]==0) { k=j;//找出標記 break; } } d[k]=-1;//標記不被找出 r[i]=k; for(j=1; j<=n; j++) if(vis[k][j])//如果存在這個邊,找出並刪除 d[j]--; } for(i=1;i<n;i++) printf("%d ",r[i]); printf("%d\n",r[n]); } return 0;}