求助!求大佬看看问题出在哪里
  • 板块P1605 迷宫
  • 楼主xxxxyz6667
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/7/11 15:19
  • 上次更新2024/7/11 16:05:09
查看原帖
求助!求大佬看看问题出在哪里
1237887
xxxxyz6667楼主2024/7/11 15:19
#include<bits/stdc++.h>
using namespace std;
int n,m,t;
int sx,sy,fx,fy;
int bx,by;//障碍的位置
typedef struct mo
{
	int x;
	int y;
}move; 
move dir[4]={{0,-1},{0,1},{-1,0},{1,0}};
vector<vector<bool> >vis(false);
int res=0;//res种类
int block[10][10];//障碍的坐标 
void dfs(int sx,int sy) 
 {
	if(sx==fx&&sy==fy)
	{
		res++;
		//cout<<res;
		return;
	}
	for(int i=0;i<3;i++)//注意这里必须是0到3,因为容器元素的标号从零开始 
	{
		//如果在这里将sxsy+=的话,则后面那个与现在同等级的循环片段的初始位置就会改变 
		if(sx+dir[i].x>=n||sy+dir[i].y>m) continue;
		if(vis[sy+dir[i].y][sx+dir[i].x]==true) continue;
		if(block[sy+dir[i].y][sx+dir[i].x]==1) continue;
		vis[sy+dir[i].y][sx+dir[i].x]=true;
		dfs(sx+dir[i].x,sy+dir[i].y);
		vis[sy][sx+dir[i].x]=false;		
	}
	return;
 } 
int main()
{
	cin>>n>>m>>t;
	cin>>sx>>sy>>fx>>fy;
	    for(int iy=1;iy<=n;iy++)
        for(int ix=1;ix<=m;ix++)
            block[iy][ix]=0;//把地图刷成0
	for(int i=1;i<=t;i++)
	{ 
		cin>>bx>>by;//障碍的位置 
		block[by][bx]=1;
	}
	vis[sy][sx]=true;
	dfs(sx,sy);//初始信息,也可以设在外面,并设一个初始值,不做参数,也可以在给参数时给一个初始值
	cout<<res;
}
2024/7/11 15:19
加载中...