代码在vs上运行,不能输出条数和路径,好像是因为没有成功调用Print函数
请大家看看哪里出了问题
题目描述:输入n,m表示行数和列数,@表示起点,*表示终点,#表示墙壁不能走,每一步都要按左上右下顺序搜索
输入样例:
5 3
.#.
#@.
*..
...
#.#
正常要输出七条路径
#include <iostream>
using namespace std;
int n, m;
int sx, sy, ex, ey;
char map[1000][1000];//标记数组
int footx[4] = { -1,0,1,0 };//方向数组
int footy[4] = { 0,-1,0,1 };
int lj[1000][2];//路径数组
int num = 0;//路径条数
bool Check(const int x,const int y)//检查下标是否合法
{
if ((x >= 1) && (x <= m) && (y >= 1) && (y <= n))
return 1;
else
return 0;
}
void Print(int z)//打印路线
{
cout << num << ": ";
for (int i = 1; i < z; i++)
{
cout << lj[i][0] << lj[i][1] << "->";
}
cout << lj[z][0] << lj[z][1] << endl;
}
void dfs(int x,int y,int s)
{
map[y][x] = '#';//保存现场
lj[s][0] = x;
lj[s][1] = y;
if (x == ex && y == ey)//
{
num++;
Print(s);
return;
}
for (int i = 0; i < 4; i++)
{
int nx = x + footx[i];
int ny = y + footy[i];
if (Check(nx, ny) && map[ny][nx] == '.')
{
dfs(nx, ny, s + 1);
map[ny][nx] = '.';//恢复现场
}
}
}
int main()
{
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
cin >> map[i][j];
if (map[i][j] == '@')//初始化起始坐标
{
sx = j;
sy = i;
}
else if (map[i][j] == '*')//初始化终点坐标
{
ex = j;
ey = i;
}
}
}
cout << "from " << sx << sy << " to " << ex << ey<<endl;
dfs(sx, sy, 1);
cout << num;
return 0;
}