本文主要是介绍hdoj1312 Red and Black--深度优先搜索,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
分析:深度优先搜索
#include<stdio.h>
#include<string.h>
#include<limits.h>int map[22][22]; //存储
int w,h,max=INT_MIN;
int dx[]={0,1,0,-1},dy[]={-1,0,1,0};//定义方向,(-1,0)左移动,(1,0)右移动,(0,-1)上移动,(0,1)下移动void dfs(int x,int y)
{int i;for(i=0;i<4;i++) //不用担心因为先封堵,造成后面把路堵死的情况{if(!map[x+dx[i]][y+dy[i]] && x+dx[i]<=h && y+dy[i]<=w && x+dx[i]>0 && y+dy[i]>0){ //第一行第一列没有存数据 //判断有没有出界max++;//能走的格子加一map[x+dx[i]][y+dy[i]]=1;//标记走过了dfs(x+dx[i],y+dy[i]);}}
}int main()
{int i,j,x,y;char c;while(scanf("%d %d",&w,&h)&&(w||h)){max=0;//最多能走的格子数memset(map,0,sizeof(map)); //每个都赋值0for(i=1;i<=h;i++) //高,即行{getchar(); //接受换行符号for(j=1;j<=w;j++) //宽{scanf("%c",&c);if(c=='.') //能走map[i][j]=0;else if(c=='#') //墙的位置map[i][j]=1;else if(c=='@') //人的初始位置{map[i][j]=1;x=i;y=j;max=1; //x,y为人的初始位置}}}dfs(x,y);printf("%d\n",max);}return 0;
}
这篇关于hdoj1312 Red and Black--深度优先搜索的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!