7 8 #.#####. #.a#..r. #..#x... ..#..#.# #...##.. .#...... ........
13
<span style="font-size:18px;">#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
#define M 1005
char map[M][M];
int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int n,m,a,b;
int k,flag;
void dfs(int x,int y,int cur)
{
int i,j;
int dx,dy;
if(x==a && y==b) // 跳出搜索
{
flag=1;
if(k>cur) // 最小步数。刚开始没有考虑到
k=cur;
return ;
}
for(i=0;i<4;i++)
{
dx=x+dir[i][0];
dy=y+dir[i][1];
if(dx>=0&&dx<n&&dy>=0&&dy<m&&map[dx][dy]!='#')
{
if(map[dx][dy]=='.')
{
map[dx][dy]='#';
dfs(dx,dy,cur+1);
map[dx][dy]='.';
}
if(map[dx][dy]=='x')
{
map[dx][dy]='#';
dfs(dx,dy,cur+2);
map[dx][dy]='x';
}
}
}
}
int main ()
{
int i,j;
int x,y;
while(cin>>n>>m)
{
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
cin>>map[i][j];
if(map[i][j]=='a')
{
x=i;
y=j;
map[x][y]='#';
}
if(map[i][j]=='r')
{
a=i;
b=j;
map[i][j]='.'; // 一定要注意终点要变为'.'。
}
}
}
k=M; // k为全局变量
flag=0;
dfs(x,y,0);
if(flag)
printf("%d\n",k);
else
printf("Poor ANGEL has to stay in the prison all his life.\n");
}
return 0;
}</span>hdu 1242 Rescue,布布扣,bubuko.com
原文:http://blog.csdn.net/fyxz1314/article/details/38122639