标签:col 内存限制 c代码 起点 tor code class 输入 相同
小Biu在玩一个棋盘游戏,这个游戏给出一个n*m的棋盘,并且每个点上有一个棋子,棋子的颜色
用一个大写字母表示。
小Biu获得游戏胜利的条件是:
1.选择一个棋子作为起点。
2.每次只能走上下左右四个方格,并且下一步方格的颜色要与当前格颜色相同
3.每个块只能经过一次,要经过不少于4个不同的格子而且最终要走回起点。
问小Biu是否可以赢得游戏的胜利
3 4
AAAA
ABCA
AAAA
Yes
#pragma GCC optimize(2) #include<bits/stdc++.h> using namespace std; inline int read() {int x=0,f=1;char c=getchar();while(c!=‘-‘&&(c<‘0‘||c>‘9‘))c=getchar();if(c==‘-‘)f=-1,c=getchar();while(c>=‘0‘&&c<=‘9‘)x=x*10+c-‘0‘,c=getchar();return f*x;} typedef long long ll; char a[52][52]; int n,m; int flag=0; int vis[4][2] = { { 0, 1 }, { 1, 0 }, { 0, -1 }, { -1, 0 } }; int c[52][52]={0}; int d[52][52]={0}; void dfs(char ch,int x,int y,int t){ if(flag){ return ; } if(d[x][y]&&t>3){ flag=1; return ; } for(int k=0;k<4;k++){ int xx=x+vis[k][0]; int yy=y+vis[k][1]; if ( xx>=n || xx<0 || yy>=m || yy<0 || c[xx][yy] || ch!=a[xx][yy] ) continue; c[xx][yy]=1; dfs(ch,xx,yy,t+1); c[xx][yy]=0; } } int main() { memset(c,0,sizeof(c)); memset(d,0,sizeof(d)); cin>>n>>m; for(int k=0;k<n;k++){ cin>>a[k]; } for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ d[i][j]=1; dfs(a[i][j],i,j,0); if(flag==1){ break; } d[i][j]=0; } if(flag){ break; } } if(flag){ printf("Yes\n"); } else{ printf("No\n"); } return 0; }
AC代码2:
#pragma GCC optimize(2) #include<bits/stdc++.h> using namespace std; inline int read() {int x=0,f=1;char c=getchar();while(c!=‘-‘&&(c<‘0‘||c>‘9‘))c=getchar();if(c==‘-‘)f=-1,c=getchar();while(c>=‘0‘&&c<=‘9‘)x=x*10+c-‘0‘,c=getchar();return f*x;} typedef long long ll; char a[52][52]; int n,m; int flag=0; int vis[4][2] = { { 0, 1 }, { 1, 0 }, { 0, -1 }, { -1, 0 } }; int c[52][52]={0}; int d[52][52]={0}; void dfs(char ch,int x,int y,int t){ if(flag){ return ; } for(int k=0;k<4;k++){ int xx=x+vis[k][0]; int yy=y+vis[k][1]; if(d[xx][yy]&&t>3){ flag=1; return ; } if ( xx>=n || xx<0 || yy>=m || yy<0 || c[xx][yy] || ch!=a[xx][yy] ) continue; c[xx][yy]=1; dfs(ch,xx,yy,t+1); c[xx][yy]=0; } } int main() { memset(c,0,sizeof(c)); memset(d,0,sizeof(d)); cin>>n>>m; for(int k=0;k<n;k++){ cin>>a[k]; } for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ d[i][j]=1; c[i][j]=1; dfs(a[i][j],i,j,1); if(flag==1){ break; } d[i][j]=0; c[i][j]=1; } if(flag){ break; } } if(flag){ printf("Yes\n"); } else{ printf("No\n"); } return 0; }
标签:col 内存限制 c代码 起点 tor code class 输入 相同
原文地址:https://www.cnblogs.com/lipu123/p/12182059.html