正文

pku(2567)(2)2005-09-08 04:49:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/ddtme/4505.html

分享到:

#include <cstdio> #include <memory.h> #include <cctype> #define MAXN 100 int degree[MAXN]; bool adj[MAXN][MAXN]; int n; int ni; char line[1000]; void make(int root,int &k) {      if (root>n) n=root;      while (line[k]=='(')      {            int now;            k++;            sscanf(line+k,"%d",&now);            while (isdigit(line[k])) k++;            degree[root]++;            degree[now]++;            adj[root][now]=adj[now][root]=true;            make(now,k);            k++;      }      return; } int main() {     char ch;     int len;     int i,j,k;     while (scanf("%c",&ch)!=EOF)     {           len=0;           k=0;           memset(line,0,sizeof(line));           memset(degree,0,sizeof(degree));           memset(adj,false,sizeof(adj));           while (ch!=10)           {                 while (ch==' ') scanf("%c",&ch);                 if (ch!=10)                 {                     line[len]=ch;                     len++;                     scanf("%c",&ch);                 }           }           n=0;           make(0,k);           for (i=1;i<=n;i++)           if (adj[0][i])           {               adj[0][i]=adj[i][0]=false;               degree[i]--;               break;           }                                 ni=0;           while (++ni<n)           {                 for (i=1;i<=n;i++) if (degree[i]==1) break;                 for (j=1;j<=n;j++) if (adj[i][j])                 {                     adj[i][j]=adj[j][i]=false;                     degree[j]--;                     printf("%d",j);                     if (ni<n-1) putchar(' ');                     break;                 }                 degree[i]--;           }           putchar('\n');     }     return 0; }

阅读(17907) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册