社区讨论
自己出的题代码出问题了 求助 玄关
学术版参与者 2已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @lu4zbrrz
- 此快照首次捕获于
- 2024/03/24 11:48 2 年前
- 此快照最后确认于
- 2024/03/24 14:08 2 年前
代码内容:输入一个迷宫的长、宽以及迷宫内容(空格代表可以走,#代表墙,s和e分别是起点和终点),返回迷宫是否有解。出现问题:输出不符合答案。
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坐标;
string a[maxn];//输入字符串数组
string f;
//
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=0;i<n;i++){//输入迷宫;
for(int j=0;j<m;j++){
cin >> mg[i][j];
}
}*/
//上面这个对 ,下面的新版不对
scanf("%d%d",&n,&m);
getline(cin,f);
for(int i=0;i<m;i++){
getline(cin,a[i]);
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(a[i][j]!='#'){
mg[i][j]=1;
if(a[i][j]=='s'){
sx=i;sy=j;
}
if(a[i][j]=='e'){
ex=i;ey=j;
}
}else if(a[i][j]==' '){
mg[i][j]=0;
}
}
}
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;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...