12 9
1 1 0 0 1 1 1 0 1
0 1 1 1 1 0 1 1 1
0 0 0 0 1 1 0 0 0
1 1 1 1 1 1 1 1 1
1 0 0 0 0 0 1 1 1
1 1 1 1 1 0 0 1 0
0 1 0 0 0 0 1 0 1
0 1 1 1 1 0 1 1 1
0 0 1 1 0 1 0 1 0
0 0 0 1 1 0 1 0 1
0 0 0 0 1 1 1 1 1
1 1 1 1 1 1 0 0 0
1 1
12 5
不知道为什么 ansy0 的值会变,导致一直 85 分
#include<bits/stdc++.h>
using namespace std;
const int N = 20;
int n, m, sx, sy, ex, ey, flag;
int mp[N][N];
int ansx[N], ansy[N];
int dx[] = {0, -1, 0, 1};
int dy[] = {-1, 0, 1, 0};
void print(int k){//打印结果
for(int i = 0; i < k; i++){
printf("(%d,%d)->", ansx[i], ansy[i]);
}
printf("(%d,%d)\n", ex, ey);
}
bool in(int x, int y){
return x >= 1 && x <= n && y >= 1 && y <= m;
}
bool vis[N][N];
void dfs(int x, int y, int step){
if(x == ex && y == ey){
print(step);
flag = 1;
return ;
}
for(int i = 0; i < 4; i++){
int nx = x + dx[i];
int ny = y + dy[i];
if(in(nx, ny) && !vis[nx][ny] && mp[nx][ny] == 1){
vis[nx][ny] = true;
ansx[step + 1] = nx; ansy[step + 1] = ny;//放入最新坐标
dfs(nx, ny, step + 1);
vis[nx][ny] = false;
}
}
}
int main(){
cin >> n >> m;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
cin >> mp[i][j];
}
}
cin >> sx >> sy >> ex >> ey;
vis[sx][sy] = true;
ansx[0] = sx; ansy[0] = sy;//存起点
dfs(sx, sy, 0);
if(!flag)puts("-1");//没有输出 -1
}