csu1102 bfs
来源:互联网 发布:linux dump文件 编辑:程序博客网 时间:2024/05/09 02:13
/*思路:在大的里面找一个’*‘,然后从小多连块里的”*“对应,然后从小连块里找”*“,小多连块里的”*“的位置,相对于大多连块里的那个位置也要是”*“,否则,就不行。*/#include<stdio.h>#include<string.h>#include<stdlib.h>#include<queue>using namespace std;struct node{ int x,y; int x1,y1;};char map1[15][15];char map2[15][15];int vis[15][15];int flag[15][15];int n,m;int dir[4][2]={1,0,-1,0,0,1,0,-1};int jude(int x,int y){ if(x<1||x>n||y<1||y>m) return 0; return 1;}int bfs(int x,int y){ int flag1; for(int i=1;i<=m;i++) { for(int j=1;j<=m;j++) { if(map2[i][j]=='*') { flag1=1; memset(flag,0,sizeof(flag)); flag[i][j]=1; vis[i][j]=1; node a={i,j,x,y}; queue<node>q; q.push(a); while(!q.empty()&&flag1) { a=q.front(); q.pop(); for(int i=0;i<4&&flag1;i++) { int xx=dir[i][0]+a.x; int yy=dir[i][1]+a.y; int xx1=dir[i][0]+a.x1; int yy1=dir[i][1]+a.y1; if(!jude(xx,yy)) continue ; if(map2[xx][yy]!='*') continue ; if(flag[xx][yy]) continue ; if(map1[xx1][yy1]!='*') flag1=0; if(vis[xx1][yy1]) flag1=0; node b={xx,yy,xx1,yy1}; vis[xx1][yy1]=1; flag[xx][yy]=1; q.push(b); } } if(flag1==1) return 1; } } } return 0;}int main(){ while(scanf("%d%d",&n,&m)) { if(n==0&&m==0) break; for(int i=1;i<=n;i++) { scanf("%s",map1[i]+1); } /* for(int i=1;i<=n;i++) puts(map1[i]+1);*/ for(int i=1;i<=m;i++) { scanf("%s",map2[i]+1); } /* for(int i=1;i<=m;i++) puts(map2[i]+1);*/ memset(vis,0,sizeof(vis)); int flag=1; for(int i=1;i<=n&&flag;i++) { for(int j=1;j<=n&&flag;j++) { if(map1[i][j]=='*'&&!vis[i][j]) { if( !bfs(i,j)) {printf("0\n"); flag=0;} } } } if(flag) printf("1\n"); }}
阅读全文
0 0
- csu1102 bfs
- CSU1102 多连块拼图 湖南第七届省赛
- BFS
- bfs
- BFS
- BFS
- bfs
- BFS
- bfs
- BFS
- BFS
- bfs
- BFS
- BFS
- BFS
- BFS
- BFS
- bfs
- 三种数值型数据交换的比较
- DNS服务器的搭建
- Redis、nginx常用命令
- 小白学tkinter(Text组件的‘撤销’和‘恢复’操作)
- 基于线性探测法的散列表 (c++)
- csu1102 bfs
- 如何在Qt Creator中创建pri文件,以及pri文件的说明
- sprmvc将前台String转化为后台的Date类型
- Linux 系统恢复
- java中,对象和类、接口
- 2016年顶尖优秀的开发工具
- 浮点数引发的Canvas绘制血案
- wireshark中级使用抓包学习
- 简单的使用API接口