您的位置:首页 > 其它

57.深度优先搜索 广搜练习:迷宫(未结题)

2016-03-10 10:37 393 查看
时间限制: 1 s

空间限制:
32000 KB

题目等级
: 黄金 Gold

题解


题目描述 Description


小刚在迷宫内,他需要从A点出发,按顺序经过B,C,D……,到达最后一个点,再回到A点。迷宫内有些障碍,问至少走几步。


输入描述 Input Description


第一行有三个数n,m表示迷宫有n行,m列。

第2行到第n+1行,每行m个字符,可能是’A’..’Z’,’2’,’0’
其中,2表示障碍,0表示可以走。’A’..’Z’也可以走。


输出描述 Output
Description


至少走几步可以按规定走完,如果不行,输出“Impossible”


样例输入 Sample Input


5 5

A002B

022C0

000D0

00222

0000E


样例输出 Sample Output


26


数据范围及提示 Data Size &
Hint


0%的数据满足:1<=n<=10
1<=m<=10 字母为“A”..“B”。

30%的数据满足:1<=n<=10
1<=m<=10 字母为“A”..“G”。

50%的数据满足:1<=n<=10
1<=m<=10 字母为“A”..“Z”。

10%的数据满足:1<=n<=100
1<=m<=100 字母为“A”..“B”。

30%的数据满足:1<=n<=100
1<=m<=100 字母为“A”..“G”。

100%的数据满足:1<=n<=100
1<=m<=100 字母为“A”..“Z”。

代码:

深搜做法:(程序复杂,递归很多,大数据超时)

#include

using namespace std;

#include

#include

const int maxn=101;

#define INF 9999999

int p[maxn][maxn],n,m,step[28]={0},maxnint;

struct ZM{

int
x,y;

};

ZM zm[27];

int xx[]={0,0,1,-1};

int yy[]={1,-1,0,0};

char maxchar='A';

void input();

void DFS(int,int,int,int);

int main()

{

input();

for(int
i=1;i

DFS(zm[i].x,zm[i].y,i+1,0);

DFS(zm[maxnint].x,zm[maxnint].y,1,0);

long long
sum=0;

for(int
i=1;i<=maxnint;++i)

{

if(step[i]==1667457891)

{

printf("Impossible");

return 0;

}

sum+=step[i];

}

printf("%d",sum);

return
0;

}

void DFS(int x1,int y1,int i,int ans)

{

if(x1==zm[i].x&&y1==zm[i].y&&ans

{

step[i]=ans;

if(i==1)
return;

}

if(i==maxnint+1)

{

i=1;

ans=0;

}

for(int
j=0;j<4;++j)

{

int x2=x1+xx[j],y2=y1+yy[j];

if(x2>=1&&x2<=n&&y2>=1&&y2<=m&&p[x2][y2]==0)

{

p[x2][y2]=2;

DFS(x2,y2,i,ans+1);

p[x2][y2]=0;

}

}

}

void input()

{

memset(step,99,sizeof(step));

scanf("%d%d",&n,&m);

char
ppp[101];

for(int
i=1;i<=n;++i)

{

scanf("%s",ppp+1);

for(int j=1;j<=m;++j)

{

if(ppp[j]>='A'&&ppp[j]<='Z')

{

if(ppp[j]>=maxchar)

maxchar=ppp[j];

int bh=ppp[j]-'A'+1;

zm[bh].x=i;

zm[bh].y=j;

p[i][j]=0;

}

if(ppp[j]=='2')

p[i][j]=2;

}

}

maxnint=maxchar-'A'+1;

}

广搜做法:

再建一个矩阵,存储由上一个字符到这个点的时间,因此入队进行筛查就行了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: