2173944 | 2006-12-17 23:15:34 | Accepted | 1097 | C++ | 00:00.02 | 876K | Crux.D |
烦题,输入巨无聊。如果不想自己写的话参考一下吧。
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
string s;
int a[51][51], b[51], c[51], si, mx;
int node()
{
int t = 0;
while(s[si] >= '0' && s[si] <= '9')
{
t *= 10;
t += s[si ++] - '0';
}
return t;
}
void build(int n)
{
int t;
if(n > mx) mx = n;
while(s[si] == '(')
{
si ++;
t = node();
if(n)
{
b[n] ++;
b[t] ++;
a[t][n] = 1;
a[n][t] = 1;
}
build(t);
si ++;
}
}
void init()
{
si = 0, mx = 0;
memset(b, 0, sizeof(b));
memset(a, 0, sizeof(a));
memset(c, 0, sizeof(c));
int i;
string ts = "";
for(i = 0; i < s.size(); i ++)
{
if(s[i] != ' ')
ts += s[i];
}
s = ts;
}
void print()
{
int i, k, j, min, v;
//pb();
for(i = 0; i < mx - 1; i ++)
{
if(i) printf(" ");
min = mx;
for(j = 1; j <= mx; j ++)
{
if(!c[j] && b[j] == 1 && min > j)
min = j;
}
for(k = 1; k <= mx; k ++)
{
if(a[min][k] || a[k][min])
{
v = k; break;
}
}
printf("%d", v);
a[min][v] = 0, a[v][min] = 0;
b[v] --;
c[min] = 1;
b[min] = 0;
//pa();
//pb();
}
printf("\n");
}
int main()
{
//freopen("in.txt", "r", stdin);
while(getline(cin, s))
{
init();
build(0);
//pa();
print();
}
return 0;
}
评论