廣度搜尋 01迷宮

2021-10-02 15:36:06 字數 1275 閱讀 7301

有乙個僅由數字0與1組成的n×n格迷宮。若你位於一格0上,那麼你可以移動到相鄰4格中的某一格1上,同樣若你位於一格1上,那麼你可以移動到相鄰4格中的某一格0上。

你的任務是:對於給定的迷宮,詢問從某一格開始能移動到多少個格仔(包含自身)。

第1行為兩個正整數n,m。

下面n行,每行n個字元,字元只可能是0或者1,字元之間沒有空格。

接下來m行,每行2個用空格分隔的正整數i,j,對應了迷宮中第ii行第jj列的乙個格仔,詢問從這一格開始能移動到多少格。

輸出格式 m行,對於每個詢問輸出相應答案。

輸入 #1 複製

2 201

101 1

2 2輸出 #1 複製44

說明/提示

所有格仔互相可達。

對於20%的資料,n≤10;

對於40%的資料,n≤50;

對於50%的資料,m≤5;

對於60%的資料,n≤100,m≤100;

對於100%的資料,n≤1000,m≤100000。

原本做法是 for乙個迴圈,問一次哪個點,就代入進去bfs 一次,輸出結果。

這樣數量大的時候還是超時。。。。。。

然後才懂 原來 -問的那個點 它能走到的格仔,每個也是能走到的格仔數量都是一樣的。

就是說 乙個點,它能聯通的那些點都是同樣的格仔數。

那就再開個陣列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...