POJ 1481
来源:互联网 发布:php 文件管理 代码 编辑:程序博客网 时间:2024/06/06 14:03
AC啦!!!此题用到了两个DFS,刚开始一直认为两个DFS是交叉的,一直是错。后来从最简单的方面考虑,它遍历它的,它遍历它的,最后搞出来啦。
#include <stdio.h>#include <memory.h>#include <stdlib.h>const int maxn=50+10;char map[maxn][maxn];int visit[maxn][maxn];int visit2[maxn][maxn];int total[maxn];int amount=0;int m,n,flag;int count1;int dir[4][2]={{0,-1},{-1,0},{0,1},{1,0}};void dfs(int x,int y);void dfs2(int x,int y);int cmp(const void* aa,const void* bb){int* a=(int*)aa;int* b=(int*)bb;return *a-*b;}int main(){while(scanf("%d %d",&n,&m)==2){if(n==0) break;count1=0; memset(total,0,sizeof(total));memset(visit,0,sizeof(visit));memset(visit2,0,sizeof(visit2));amount++;int i,j;for(i=0;i<m;i++){ scanf("%s",map[i]);}for(i=0;i<m;i++){for(j=0;j<n;j++){if((map[i][j]=='*'||map[i][j]=='X')&&!visit[i][j]){ count1++;dfs(i,j);}}}qsort(total,count1,sizeof(int),cmp);printf("Throw %d\n",amount);int k;for(k=0;k<count1-1;k++){if(total[k]!=0) printf("%d ",total[k]);}printf("%d\n",total[k]);printf("\n");}return 0;}void dfs(int x,int y){int dx,dy;if(map[x][y]=='.'||visit[x][y]||x<0||x>=m||y<0||y>=n) return;else{ visit[x][y]=1;if(map[x][y]=='X'&&visit2[x][y]==0){total[count1-1]++;for(int k=0;k<4;k++){dx=x+dir[k][0];dy=y+dir[k][1];dfs2(dx,dy);}}for(int k=0;k<4;k++){dx=x+dir[k][0];dy=y+dir[k][1];dfs(dx,dy);}}}void dfs2(int x,int y){int dx,dy;if(map[x][y]=='.'||visit2[x][y]||x<0||x>=m||y<0||y>=n||map[x][y]=='*') return; else{visit2[x][y]=1;int i;for(i=0;i<4;i++){dx=x+dir[i][0];dy=y+dir[i][1];dfs2(dx,dy);}}}
- POJ-1481
- POJ 1481
- uva 657 poj 1481
- POJ
- poj
- POJ
- POJ
- poj
- poj
- POJ
- POJ
- poj
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- Transact-SQL程序设计
- 第十四周 任务一
- 线性表的操作
- Linux下测试程序的运行时间
- 并查集
- POJ 1481
- 这是在csdn的第一篇
- 第十二周实验报告一
- ubuntu mysql 安装和用户登录
- 实验报告13-3
- Windows 7系统下如何查本机IP
- ios http请求
- 修改板 mfoc 0.10.3 增加中断、选择扇区、可选默认密码等功能
- android CursorAdapter的监听事件