这里写自定义目录标题
欢迎使用Markdown编辑`
在这里插入代码片
## B01:走迷宫-找所有路径
总Time Limit: 1000ms 单个测试点时间限制: 100ms Memory Limit: 64kB
Description
有一个mn格的迷宫(表示有m行、n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这mn个数据和起始点、结束点(起始点和结束点都是用两个数据来描述的,分别表示这个点的行号和列号)。现在要你编程找出所有可行的道路,要求所走的路中没有重复的点,走时只能是上下左右四个方向。如果一条路都不可行,则输出相应信息(用-l表示无路)。
Input
第一行是两个数m,n(1< m ,n <15),
接下来是m行n列由1和0组成的数据,最后两行是起始点和结束点。
Output
所有可行的路径,描述一个点时用(x,y)的形式,除开始点外,其他的都要用“一>”表示方向。
如果没有一条可行的路则输出-1。
#include<iostream>
using namespace std;
struct no
{
int x,y;
}s[10000000];
int l=0;
int a[20][20];
int h,w;
int x=0,y=0;
int sum = 0;
int map(int n,int m)
{
if(n<0||m<0||n>=h||m>=w)
{
return 0;
}
if(a[n][m] == 1)
{
s[l].y = n;
s[l].x = m;
l++;
int ok = 0;
if(n==y-1&&m==x-1)
{
for(int i=0;i<l;i++)
if(i==0)
cout<<"("<<s[i].y+1<<","<<s[i].x+1<<")";
else
cout<<"->("<<s[i].y+1<<","<<s[i].x+1<<")";
sum++;
cout<<endl;
l--;
return 1;
}
a[n][m] = 2;
if(m-1>=0&&a[n][m-1]==1)
{
if(map(n,m-1))
ok = 1;
}
if(n-1>=0&&a[n-1][m]==1)
{
if(map<