http://acm.hdu.edu.cn/showproblem.php?pid=5926
题意:判断给出的这个连连看能不能连上(一次就行)
水,在首行首列或者尾行尾列的需要判断一下自己这一行或者这一列有没有能连上的(四个角的行列都需要判断),然后是所有的都判断一下相邻的能不能连就可以了
啪啪啪打完开心的提交,emmmm居然wa了.....怎么看都没错,又重新看了一遍题的时候突然发现人家要的是只有首字母大写的yes和no.....我全大写了,真是个傻子2333
1 #include<iostream> 2 using namespace std; 3 int s[33][33]; 4 int X,Y; 5 bool ch(int x,int y) 6 { 7 int i,j; 8 if(x==1||x==X)//首行尾行 9 { 10 j=1; 11 while(j<=Y) 12 { 13 if(s[x][j]==s[x][y]&&y!=j)return 0; 14 j++; 15 } 16 } 17 if(y==1||y==Y)//首列尾列 18 { 19 i=1; 20 while(i<=Y) 21 { 22 if(s[i][y]==s[x][y]&&i!=x)return 0; 23 i++; 24 } 25 } 26 if(x-1>0&&s[x-1][y]==s[x][y])return 0;//判断上下左右 27 if(y-1>0&&s[x][y-1]==s[x][y])return 0; 28 if(x+1<=X&&s[x+1][y]==s[x][y])return 0; 29 if(y+1<=Y&&s[x][y+1]==s[x][y])return 0; 30 return 1; 31 } 32 int main() 33 { 34 int T,I=1; 35 scanf("%d",&T); 36 while(T--) 37 { 38 bool f=1;//游戏是否可行的标志1为不可行 39 printf("Case #%d: ",I++); 40 scanf("%d %d",&X,&Y); 41 int i,j; 42 i=1; 43 while(i<=X) 44 { 45 j=1; 46 while(j<=Y) 47 { 48 scanf("%d",&s[i][j]); 49 j++; 50 } 51 i++; 52 } 53 i=1; 54 while(i<=X&&f)//如果f为0说明游戏可行终止循环 55 { 56 j=1; 57 while(j<=Y&&f)//如果f为0说明游戏可行终止循环 58 { 59 if(!ch(i,j))f=0;//可行置0 60 j++; 61 } 62 i++; 63 } 64 if(!f) 65 printf("Yes\n"); 66 else 67 printf("No\n"); 68 } 69 return 0; 70 }
原文地址:https://www.cnblogs.com/icfir/p/9022455.html
时间: 2024-10-11 18:17:30