作业介绍

#include<iostream>
using namespace std;

// 标记数组
bool vis[55][55];
// 地图数组
bool mp[55][55];
// 偏移数组:上下左右
int dx[4] = {0,-1,0,1};
int dy[4] = {-1,0,1,0};
// 路径数组
int res[230][2];  // res[i][0] = x, res[i][1] = y
// 地图大小
int n, m;
// 起点 终点
int sx,sy, ex,ey;
int ans = 0;
// dfs(x,y,t)从(x,y)出发走到终点有多少种方案,t表示当前是第几步
void dfs(int x, int y, int t){
	// 递归边界:走到终点
	if(x==ex && y==ey){
		ans++;
		for(int i=1;i<t;i++){
			printf("(%d,%d)->", res[i][0], res[i][1]);
		}
		printf("(%d,%d)\n", x, y);
		return;
	}
	vis[x][y] = 1;
	res[t][0] = x;
	res[t][1] = y;
	// 搜索可以走的方向
	for(int i=0;i<4;i++){
		int xx = x + dx[i];
		int yy = y + dy[i];
		// 可行性验证
		if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&mp[xx][yy]==1&&vis[xx][yy]==0){
			dfs(xx, yy, t+1);
		}
	}
	vis[x][y] = 0;
}

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;
	dfs(sx,sy, 1);
	if(ans == 0) cout<<-1;
	return 0;
}
状态
已结束
题目
3
开始时间
2025-3-2 9:00
截止时间
2025-3-12 23:59
可延期
24 小时