父親、兒子、兄弟表示法儲存多叉樹
阿新 • • 發佈:2018-10-31
兄弟表示法:
#include<cstdio> #include<algorithm> using namespace std; int n,m,son[101][101],cnt[101],x,Fa[101],y,pre,lc[101],rc[101]; void dfs(int x){ if(!x) return; sort(son[x]+1,son[x]+cnt[x]+1); lc[x] = son[x][1]; dfs(son[x][1]); for(int i=2;i<=cnt[x];i++){ dfs(son[x][i]); rc[son[x][i-1]] = son[x][i]; Fa[son[x][i]]=son[x][i-1]; } } int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=m;i++){ scanf("%d%d",&x,&y); son[x][++cnt[x]]=y; Fa[y]=x; } for(int i=1;i<=n;i++) if(!Fa[i]) dfs(i),Fa[i]=pre,pre=i; for(int i=1;i<=n;i++) printf("%d\n",Fa[i]); }