概述
题目链接:点击链接
题目意思就是 从一个点出发,最多能走多少步
DFS:
#include<stdio.h>
#include<iostream>
using namespace std;
int ans,x,y;
int f[4][2] = {{1,0},{-1,0},{0,1},{0,-1}};
char map[22][22];
void dfs(int i,int j)
{
ans ++;
int k;
for(k = 0 ; k < 4 ; k ++)
{
int fx = i + f[k][0];
int fy = j + f[k][1];
if(fx < x && fx >= 0 && fy < y && fy >= 0 && map[fx][fy] == '.')
{
map[fx][fy] = '#';
dfs(fx,fy);
}
}
}
int main()
{
//freopen("in.txt","r",stdin);
int i,j;
while(scanf("%d%d",&y,&x) && ( x + y ))
{
ans = 0;
for(i = 0 ; i < x ; i ++)
scanf("%s",map[i]);
int p = 0;
for(i = 0 ; i < x ; i ++)
{
for(j = 0 ; j < y ; j ++)
{
if(map[i][j] == '@')
{
dfs(i,j);
p = 1;
break;
}
}
if( p == 1) break;
}
printf("%dn",ans);
}
return 0;
}
BFS:
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
char map[25][25];
int n,m,d[4][2] = { {-1,0},{1,0},{0,-1},{0,1} };
int begin_x,begin_y,step;
int v[25][25];
struct node
{
int x,y;
};
void bfs()
{
queue <node> q;
node s,temp;
s.x = begin_x;
s.y = begin_y;
q.push(s);
while(!q.empty())
{
temp = q.front();
q.pop();
for(int i = 0 ; i < 4 ; i ++)
{
s = temp;
s.x += d[i][0];
s.y += d[i][1];
if(v[s.x][s.y]) continue;
if(s.x >= 0 && s.x < n && s.y >= 0 && s.y < m && map[s.x][s.y] == '.')
{
step ++;
v[s.x][s.y] = 1;
q.push(s);
}
}
}
}
int main()
{
int i,j;
while(scanf("%d%d",&m,&n) && (n || m))
{
memset(v,0,sizeof(v));
for(i = 0 ; i < n ; i ++)
{
scanf("%s",map[i]);
for(j = 0 ; j < m ; j ++)
if(map[i][j] == '@')
{
begin_x = i;
begin_y = j;
v[i][j] = 1;
break;
}
}
step = 1;
bfs();
printf("%dn",step);
}
return 0;
}
最后
以上就是土豪雪碧为你收集整理的hdu1312 Red and Black(DFS/BFS入门题目)的全部内容,希望文章能够帮你解决hdu1312 Red and Black(DFS/BFS入门题目)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复