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;
}
广搜做法:
再建一个矩阵,存储由上一个字符到这个点的时间,因此入队进行筛查就行了
空间限制:
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;
}
广搜做法:
再建一个矩阵,存储由上一个字符到这个点的时间,因此入队进行筛查就行了
相关文章推荐
- 1.C#中几个简单的内置Attribute
- caffe学习笔记1.1-- caffe的Makefile文件
- SQL SERVER字符串处理
- python进行Base64编码和解码
- Data Structures-1 bubble_sort中的change作用举例
- 2016年1月网络不良与垃圾信息:淫秽网站占比居首
- ios开发证书失效
- win7配置免安装mysql
- 从app跳转到手机设置(代码)
- 设计模式:简单工厂、工厂方法、抽象工厂之小结与区别
- 网页打印控制@media print
- STM32_UART_笔记
- 初探JVM之垃圾收集算法
- 华为多臂路由配置
- CodeForces - 630K Indivisibility (容斥原理)
- Quartz定时调度框架
- TCP/IP知识总结(TCP/IP协议族读书笔记三)
- 焦点轮播图——myfocus焦点图库
- JS_元素位置大小
- jQuery 方法