深搜求助!!
  • 板块学术版
  • 楼主DevilsFlame
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/11/21 13:14
  • 上次更新2023/11/21 17:37:21
查看原帖
深搜求助!!
1050431
DevilsFlame楼主2023/11/21 13:14

文字描述

‘#’表示墙壁,‘.’表示路,‘!’表示终点,‘@’表示出生点。
输入一个n表示矩阵宽度
.....(此处省略)
输出到终点的最短路径(若干个“<x,y>”)

#include<bits/stdc++.h>
using namespace std;
int f[2][1000],dx[4]={0,1,-1,0},dy[4]={1,0,0,-1},ans=999,n;
char s[100][100];
int bfs(int x,int y,int r){
	bool q=0;
	int l=r;
	if(x>0&&x<=n&&y>0&&y<=n&&s[x][y]=='!'&&l<ans){
		ans=r;
		f[0][r]=x;
		f[1][r]=y;
		return 1;
	}
	for(int i=0;i<=3;i++){
		if((x+dx[i])<=n&&(y+dy[i])<=n&&(x+dx[i])>0&&(y+dy[i])>0&&s[x+dx[i]][y+dy[i]]!='#'){
			if(bfs(x+dx[i],y+dy[i],l+1)==1){//就是这里程序出问题
				q=1;
				f[0][r]=x;
				f[1][r]=y;
			}
		}
	}
	if(q){
		return 1;
	}
	return 0;
}
int main(){
	int x,y;
	cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>s[i][j];
			if(s[i][j]=='@'){
				x=i,y=j;
			}
		}
	}
	int w;
	w=bfs(x,y,1);
	if(w==2){
		cout<<-1<<endl;
	}
	else{
		for(int i=1;i<=ans;i++){
			cout<<"<"<<f[0][i]<<','<<f[1][i]<<">"<<endl;
		}
	}
	return 0;
}
2023/11/21 13:14
加载中...