第一次做迷宫类深搜,求教大佬
  • 板块P1683 入门
  • 楼主thankyou158
  • 当前回复6
  • 已保存回复8
  • 发布时间2024/12/6 21:35
  • 上次更新2024/12/7 00:11:23
查看原帖
第一次做迷宫类深搜,求教大佬
1523816
thankyou158楼主2024/12/6 21:35

这道题我用连通块做倒能ac,但确实失去这题意义了,不知道为什么程序有死循环,应该还有点问题。求指教

#include <bits/stdc++.h>
using namespace std;
int next[4][2]={{-1,0},{1,0},{0,-1},{0,1}};//上下左右 
char th[20][20]={'#'};
int dh[20][20]={0};//地图和标记走没走过 
int q=1,p=0;//q是输出,p 
int w,h;
void dfs(int x,int y);
int main(){
int x,y;
scanf("%d %d",&h,&w);
for(int i=0;i<w;i++){
	for(int j=0;j<h;j++){
		scanf(" %c",&th[i][j]);
		if(th[i][j]=='.'){
		x=j;
		y=i;	
		} }}//输入地图,并任选一块‘.’为起点 
		dh[y][x]=1;		
dfs(x,y);
printf("%d",q);
} 
void dfs(int x,int y){
if(th[y][x]=='@'){
	if(q>p){
		p=q;}
		return;}//终点返回 
for(int i=0;i<4;i++){//选一个方向 
	int dx=x+next[i][1],dy=y+next[i][0];{
if(dx>=0&&dx<h&&dy>=0&&dy<w&&th[dy][dx]!='#'){
	if(dh[dy][dx]==0){
		q++;
		dh[dy][dx]=1;}		
	dfs(dx,dy); }
}}	
return;
}
2024/12/6 21:35
加载中...