fork download
  1. #include<cstdio>
  2. #include<cstring>
  3. #include<iostream>
  4. #include<sstream>
  5. #include<queue>
  6. using namespace std;
  7. #define pii pair< int, int>
  8. int n,m,grid[105][105];
  9. char inp[101*101];
  10. bool inRange(int i, int j)
  11. {
  12. m=n;
  13. return (i>=0 && i<n && j>=0 && j<m);
  14. }
  15. int main()
  16. {
  17. int i,j,comp;
  18. scanf("%d",&n);
  19. while(n!=0)
  20. {
  21. if(n==1)
  22. {
  23. printf("good\n");
  24. scanf("%d",&n);
  25. continue;
  26. }
  27. for(i=0;i<n;i++)
  28. {
  29. for(j=0;j<n;j++)
  30. {
  31. grid[i][j]=0;
  32. }
  33. }
  34. int a,b,start1[n],start2[n],print=0,c,d;
  35. queue< pii > Q;
  36. pii p;
  37. getchar();
  38. for(i=1;i<=n-1;i++)
  39. {
  40. gets(inp);
  41. stringstream ss(inp);
  42. for(j=1;j<=n;j++)
  43. {
  44. ss>>a>>b;
  45. if(j==1)
  46. {
  47. start1[i-1]=a;
  48. start2[i-1]=b;
  49. printf("%d %d\n",start1[i-1],start2[i-1]);
  50. }
  51. grid[a-1][b-1]=i;
  52. }
  53. }
  54. for(int x=0;x<n-1;x++)
  55. {
  56. int count =1;
  57. /* if(x==n-1)
  58.   {
  59.   comp=0;
  60.   p.first=c;
  61.   p.second=d;
  62.   Q.push(p);
  63.   }*/
  64.  
  65.  
  66. comp=x+1;
  67. p.first=start1[x]-1;
  68. p.second=start2[x]-1;
  69. Q.push(p);
  70.  
  71. while(!Q.empty())
  72. {
  73. p=Q.front();
  74. i=p.first;
  75. j=p.second;
  76. Q.pop();
  77. // printf("%d %d\n",i,j);
  78. grid[i][j]=-1;
  79. /*if(x!=n-1)
  80.   {
  81.   if(inRange(i+1,j) && grid[i+1][j]==0)
  82.   {c=i+1;
  83.   d=j;
  84.   }
  85.   if(inRange(i-1,j) && grid[i-1][j]==0)
  86.   {
  87.   c=i-1;
  88.   d=j;
  89.   }
  90.   if(inRange(i,j+1) && grid[i][j+1]==0)
  91.   {
  92.   c=i;
  93.   d=j+1;
  94.   }
  95.   if(inRange(i,j-1) && grid[i][j-1]==x+1)
  96.   {
  97.   c=i;
  98.   d=j-1;
  99.   }
  100.   } */
  101.  
  102. if(inRange(i+1,j) && grid[i+1][j]==comp)
  103. {
  104. p.first=i+1;
  105. p.second=j;
  106. Q.push(p);
  107. count+=1;
  108. }
  109. if(inRange(i-1,j) && grid[i-1][j]==comp)
  110. {
  111. p.first=i-1;
  112. p.second=j;
  113. Q.push(p);
  114. count+=1;
  115. }
  116. if(inRange(i,j+1) && grid[i][j+1]==comp)
  117. {
  118. p.first=i;
  119. p.second=j+1;
  120. Q.push(p);
  121. count+=1;
  122. }
  123. if(inRange(i,j-1) && grid[i][j-1]==comp)
  124. {
  125. p.first=i;
  126. p.second=j-1;
  127. Q.push(p);
  128. count+=1;
  129. }
  130. }
  131. if(count!=n)
  132. {
  133. print=1;
  134. printf("wrong\n");
  135. break;
  136.  
  137. }
  138. }
  139. if(print==0)
  140. printf("good\n");
  141. //printf("%d %d\n",c,d);
  142. scanf("%d",&n);
  143. }
  144. }
  145.  
  146.  
  147.  
Success #stdin #stdout 0s 2880KB
stdin
5
1 1 1 2 1 3 3 2 2 2
2 1 4 2 4 1 5 1 3 1
4 5 5 2 5 3 5 5 5 4
2 5 3 4 3 5 4 3 4 4
0
stdout
1 1
2 1
4 5
2 5
good