有乙個僅由數字0與1組成的n×n格迷宮。若你位於一格0上,那麼你可以移動到相鄰4格中的某一格1上,同樣若你位於一格1上,那麼你可以移動到相鄰4格中的某一格0上。你的任務是:對於給定的迷宮,詢問從某一格開始能移動到多少個格仔(包含自身)。
第1行為兩個正整數n,m。輸入 #1 複製下面n行,每行n個字元,字元只可能是0或者1,字元之間沒有空格。
接下來m行,每行2個用空格分隔的正整數i,j,對應了迷宮中第ii行第jj列的乙個格仔,詢問從這一格開始能移動到多少格。
輸出格式 m行,對於每個詢問輸出相應答案。
2 201
101 1
2 2輸出 #1 複製44
說明/提示
所有格仔互相可達。
對於20%的資料,n≤10;原本做法是 for乙個迴圈,問一次哪個點,就代入進去bfs 一次,輸出結果。對於40%的資料,n≤50;
對於50%的資料,m≤5;
對於60%的資料,n≤100,m≤100;
對於100%的資料,n≤1000,m≤100000。
這樣數量大的時候還是超時。。。。。。
然後才懂 原來 -問的那個點 它能走到的格仔,每個也是能走到的格仔數量都是一樣的。
就是說 乙個點,它能聯通的那些點都是同樣的格仔數。
那就再開個陣列ans【】,把 聯通的點 color 標記為一樣 存入陣列ans【color】 ,值為他們的數量,就是能走到的格仔數
遍歷所有點, 最後問哪個點的時候輸出哪個ans【】就ok
#includeusing namespace std;
#include#include#includeint n,m;
bool map[1005][1005];
int dir[4][2] = ,,,};
int vis[1005][1005];
bool in(int x,int y)
int color =0,cnt =0;
int ans[100000010];
void bfs(int x,int y)else
} }for(int i=1;i<=n;i++)
} }for(int i=0;i>x>>y; // 每次問哪個點 就輸出
cout
}
迷宮plus(廣度搜尋)
題意思路 明顯這是一道搜尋題,因為是找最短路徑而不是有多少條路,故而應是廣搜。include include include includeusing namespace std int map 100 100 建立地圖 int vis 100 100 標記是否走過 int n,m int sf 4...
迷宮 BFS 廣度優先搜尋
小c最近在研究機械人,他想看看自己的機械人夠不夠智慧型,於是他將機械人放在乙個n m的迷宮中,看看機械人能不能在最短的時間內到達目的地,可是小c不知道最短的時間是多少,現在請你幫他算算機械人到達目的地的最短時間是多少?輸入描述 輸入資料第一行兩個整數n和m。n和m的範圍 10,500 接下來n行,每...
go 廣度搜尋案例(迷宮)
1 package main23 import 4 fmt 5 os 6 78 9 將文件結構讀入到切片中 二維陣列 10 row,col 行數 列數 文件第一行資料 11 fmt.fscanf 逐一字元讀取 遇到換行返回值為0 fscan 遇到換行視為空白 12 13 14 func readma...