2935 统计线路

#include<bits/stdc++.h>
using namespace std;

//地图数组,标记数组 
int G[105][105],vis[105][105];
//方向数组:上右下左
int dx[5]={-1,0,1,0},dy[5]={0,1,0,-1}; 
int n,cnt=0;//用来接收迷宫大小,cnt统计路线数量 

void dfs(int x,int y){//传入搜的位置坐标 
	//找到终点,统计+1 
	if(G[x][y]==2){
		cnt++;//统计数量 
		return;//结束搜索 
	} 
	for(int i=0;i<4;i++){//搜索上右下左四个点 
		int xx=x+dx[i],yy=y+dy[i];//拿到下一个点的坐标 
		//搜索的点不能超出地图
		//该点没有被搜索过,该点可以通行(不为1都可以通行)		 
		if(xx>=1&&xx<=n&&yy>=1&&yy<=n
		&&G[xx][yy]!=1&&vis[xx][yy]==0){
			//把该点标记为搜索过
			vis[xx][yy]=1;
			//递归搜索过程
			dfs(xx,yy); 
			//统计路线需要加上回溯,把当前点标记为未搜索过 
			vis[xx][yy]=0; 
		} 
	} 
}

int main() {
	cin>>n;//接收地图大小 
	for(int i=1;i<=n;i++){//接收地图输入 
		for(int j=1;j<=n;j++){
			cin>>G[i][j];
		}
	}
	vis[1][1]=1;//先标记第一个位置被搜索过 
	dfs(1,1);
	cout<<cnt;//输出统计结果 
	return 0;
}


posted @ 2024-11-25 05:59  行胜于言Ibl  阅读(77)  评论(0)    收藏  举报