标签:hdu
Description
Input
Output
Sample Input
6 9 ....#. .....# ...... ...... ...... ...... ...... #@...# .#..#. 11 9 .#......... .#.#######. .#.#.....#. .#.#.###.#. .#.#..@#.#. .#.#####.#. .#.......#. .#########. ........... 11 6 ..#..#..#.. ..#..#..#.. ..#..#..### ..#..#..#@. ..#..#..#.. ..#..#..#.. 7 7 ..#.#.. ..#.#.. ###.### ...@... ###.### ..#.#.. ..#.#.. 0 0
Sample Output
45 59 6 13
题目大意:
问最多能走‘.’多少步,‘#’是墙,不能走。
解题思路:
BFS.
代码:
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
const int maxN=25;
int dirI[4]={1,0,-1,0},n,m,is,js;;
int dirJ[4]={0,1,0,-1},visited[maxN][maxN];
string str[maxN];
struct node{
int i,j;
node(int i0=0,int j0=0){
i=i0,j=j0;
}
};
void bfs(){
queue <node> path;
visited[is][js]=1;
path.push(node(is,js));
int cnt=1;
while(!path.empty()){
node s=path.front();
path.pop();
for(int i=0;i<4;i++){
int di=s.i+dirI[i],dj=s.j+dirJ[i];
if(di<0||dj<0||di>=n||dj>=m||str[di][dj]=='#') continue;
if(visited[di][dj]==1) continue;
visited[di][dj]=1;
path.push(node(di,dj));
cnt++;
}
}
printf("%d\n",cnt);
}
int main(){
while(scanf("%d%d",&m,&n)!=EOF&&n&&m){
memset(visited,-1,sizeof(visited));
for(int i=0;i<n;i++){
cin>>str[i];
for(int j=0;j<m;j++){
if(str[i][j]=='@'){
is=i,js=j;
}
}
}
bfs();
}
return 0;
}
标签:hdu
原文地址:http://blog.csdn.net/hush_lei/article/details/38982653