社区讨论

[c++]自己出的题求助 玄关

学术版参与者 3已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@lu2lqjcz
此快照首次捕获于
2024/03/22 19:52
2 年前
此快照最后确认于
2024/03/22 21:28
2 年前
查看原帖
输入一个迷宫的长,宽,起始点,终点,迷宫内容(0代表不能走,1反之),返回是否有解(bool)
CPP
#include<bits/stdc++.h>
using namespace std;
const int maxn=101;//迷宫最高大小; 
int mg[maxn][maxn];//迷宫;
int sizhou[4][2]={{1,0},{0,1},{-1,0},{0,-1}};//四周位置;
bool visit[maxn][maxn];//是否走过 ;
int sx,sy,ex,ey,n,m;//起始点x、y,终点x、y,长(x),宽(y);
deque<int>x;//队列x坐标;
deque<int>y;//队列y坐标; 
int k(int sx,int sy,int ex,int ey){//查询函数; 
	x.push_back(sx);//从起始点出发; 
	y.push_back(sy);//同上; 
	while(!x.empty()){
		int bx=x.front();//设游标; 
		int by=y.front();//同上; 
		visit[bx][by]=1;//标记; 
		for(int i=0;i<4;i++){//遍历游标四周; 
			int pbx=bx+sizhou[i][0];//目前位置; 
			int pby=by+sizhou[i][1];//同上; 
			if(pbx<n && pbx>=0 && pby < m && pby >= 0 && mg[pbx][pby]!=0 && visit[pbx][pby]==0){//是否不出格且可以走且没走过; 
				if(pbx==ex && pby == ey)return 1;//是否到终点; 
				x.push_back(pbx);//添加位置; 
	            y.push_back(pby);//同上; 
	            visit[pbx][pby]=1;//标记; 
			}	
		}
		x.pop_front();//踢掉游标; 
		y.pop_front();//同上; 
	}
	return 0;
}

int main(){
	memset(visit,0,sizeof(visit));//初始化; 
	cin >> n >> m;
	cin >> sx >> sy >> ex >> ey;
	for(int i=1;i<=n;i++){//输入迷宫; 
		for(int j=1;j<=m;j++){
			cin >> mg[i][j];
		}
	}
	cout << k(sx,sy,ex,ey);
	return 0;
}

/*
            主体框架 
int k(int sx,int sy,int ex,int ey){
	队伍初始化;
	for(队伍不为空){
		设置作用点;
		设为走过 ;
		for(遍历身边){
			if(条件){
				if(在终点){
					return 1; 
				} 
				移到队尾;
				设为走过; 
			}	 
		} 
		删队头;
	}
	return 0;
}
int main(){
	获取数据;
	cout << k(sx,sy,ex,ey); 
	return 0;
} 
*/

回复

5 条回复,欢迎继续交流。

正在加载回复...