折腾的好忧郁...大神用的指针就是那么随意...简直学习了(到底在说什么。。神志不清卖下萌好了TUT)
参考:http://blog.csdn.net/lyy289065406/article/details/6647986
#include<stdio.h> #include<iostream> #include<string.h> using namespace std; int vis[30]; typedef class{ public: int nt[30]; int num; }p; int main() { int n; while(~scanf("%d%*c", &n) && n) { p *px = new p[n+1]; for(int i = 1; i <= n; i++) { px[i].num = 0; scanf("%*c%*c"); char c; int jj; while( (c = getchar()) != '\n' ) { jj = c % ('A' - 1); px[i].nt[px[i].num++] = jj; } } int v[30] = { 0 }; v[1] = 1; int ans = 1; for(int i = 1; i <= n; i++) { memset(vis, 0, sizeof(vis)); v[i] = n+1; for(int j = 0; j < px[i].num; j++) { int x = px[i].nt[j]; if(v[x]) vis[v[x]] = 1; } for(int j = 1; i <= n; j++) //从最小的颜色开始,枚举每种颜色,最终确定结点i的染色 if(!vis[j] && v[i] > j) { v[i]=j; break; } if(ans < v[i]) ans = v[i]; } if (ans == 1) printf("1 channel needed.\n"); else printf("%d channels needed.\n", ans); delete px; } return 0; }