2935 統計線路

行胜于言Ibl發表於2024-11-25
#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;
}


相關文章