有乙個僅由數字000與111組成的n×nn \times nn×n格迷宮。若你位於一格0上,那麼你可以移動到相鄰444格中的某一格111上,同樣若你位於一格1上,那麼你可以移動到相鄰444格中的某一格000上。
你的任務是:對於給定的迷宮,詢問從某一格開始能移動到多少個格仔(包含自身)。
輸入格式:
第111行為兩個正整數n,mn,mn,m。
下面nnn行,每行nnn個字元,字元只可能是000或者111,字元之間沒有空格。
接下來mmm行,每行222個用空格分隔的正整數i,ji,ji,j,對應了迷宮中第iii行第jjj列的乙個格仔,詢問從這一格開始能移動到多少格。
輸出格式:
mmm行,對於每個詢問輸出相應答案。
輸入樣例#1:複製
2 2輸出樣例#1:複製0110
1 12 2
4所有格仔互相可達。4
對於20%20\%20%的資料,n≤10n≤10n≤10;
對於40%40\%40%的資料,n≤50n≤50n≤50;
對於50%50\%50%的資料,m≤5m≤5m≤5;
對於60%60\%60%的資料,n≤100,m≤100n≤100,m≤100n≤100,m≤100;
對於100%100\%100%的資料,n≤1000,m≤100000n≤1000,m≤100000n≤1000,m≤100000。
思路:看資料範圍,很明顯的記憶化搜尋。一次dfs所能達到的所有地方構成乙個聯通塊,且此連通塊內的任意乙個方塊的答案都相同。
#include#include#include#include#include#include#includeusing namespace std;
typedef pairp;
int d[4][2]=,,,};
int dp[1005][1005];
int s[1005][1005];
int vis[1005][1005];
char b[1005][1005];
vectorvec;
int n,m;
int cnt;
void dfs(int x,int y)
}}int main()}}
}int x,y;
for(int i=0;ireturn 0;
}
BFS 聯通塊 記憶化搜素 洛谷P1141
題目鏈結在此!首先提一下,這個題目就是很簡單的bfs,dalao們的並查集我也沒看懂 我蒻 直接寫bfs肯定是會t的,因為每乙個搜圖都會有很多重複的地方被搜到了。下面說思路 在這個圖中,很明顯就是一些聯通塊,每乙個塊裡面的每乙個座標的答案都是一樣的。那麼我們就直接把搜過的地方的每乙個座標都記錄下來,...
01迷宮(洛谷P1141)
題目描述 有乙個僅由數字0與1組成的n n格迷宮。若你位於一格0上,那麼你可以移動到相鄰4格中的某一格1上,同樣若你位於一格1上,那麼你可以移動到相鄰4格中的某一格0上。你的任務是 對於給定的迷宮,詢問從某一格開始能移動到多少個格仔 包含自身 資料範圍 n 1000 m 100000 分析 顯然互相...
洛谷P1464 Function 記憶化搜尋
對於乙個遞迴函式w a,b,c w a,b,c 如果a le 0a 0 or b le 0b 0 or c le 0c 0就返回值11.如果a 20a 20 or b 20b 20 or c 20c 20就返回w 20,20,20 w 20,20,20 如果a absi2011 比如 w 30,1,...