求调,不知道哪里错了
  • 板块P1238 走迷宫
  • 楼主qinmingze
  • 当前回复7
  • 已保存回复7
  • 发布时间2023/7/26 16:00
  • 上次更新2023/11/3 07:33:10
查看原帖
求调,不知道哪里错了
327642
qinmingze楼主2023/7/26 16:00
  • 输入样例
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

不知道为什么 ansy0ansy_0 的值会变,导致一直 8585 分

#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
}
2023/7/26 16:00
加载中...