hdu 1312——Red and Black(DFS)

来源:互联网 发布:java中有几种类型的流 编辑:程序博客网 时间:2024/05/21 16:57

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1312

解题思路:深搜+递归。这几天看搜索的题,在网上发现这个代码,觉得很是简单易懂

#include <stdio.h>#include <string.h>#include <stdlib.h>int w,h,sum,mark[25][25];char map[25][25];void DFS(int x,int y){if(map[x+1][y]=='.' && !mark[x+1][y]) //判断能否走且是否已走过{sum++;mark[x+1][y]=1; //标记DFS(x+1,y); //递归调用自身再进行深搜}if(map[x-1][y]=='.' && !mark[x-1][y]){sum++;mark[x-1][y]=1;DFS(x-1,y);}if(map[x][y+1]=='.' && !mark[x][y+1]){sum++;mark[x][y+1]=1;DFS(x,y+1);}if(map[x][y-1]=='.' && !mark[x][y-1]){sum++;mark[x][y-1]=1;DFS(x,y-1);}}int main(){int i,j;while(scanf("%d %d",&w,&h),w!=0,h!=0){sum=0;memset(mark,0,sizeof(mark));memset(map,'#',sizeof(map));getchar();for(i=0;i<h;i++)scanf("%s",map[i]);for(i=0;i<h;i++){for(j=0;j<w;j++){if(map[i][j]=='@'){sum++;mark[i][j]=1; //走过的标记为1DFS(i,j);i=h+1;j=w+1; //跳出循环}}}printf("%d\n",sum);}return 0;}



 

原创粉丝点击