⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1097 code the tree.txt

📁 浙江大学ACM练习题 1097 提交通过原代码
💻 TXT
字号:
#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;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -