11I 變換的迷宮(bfs迷宮問題)

2021-10-07 05:58:54 字數 1213 閱讀 3976

總時間限制: 1000ms

記憶體限制: 10000kb

描述愛好探險的你,找到一座裝滿了寶藏的迷宮的入口,你看到入口的大門上有乙個邊長為s的正方形的大鎖,旁邊散落著n塊正方形的金屬小片,你意識到鎖的鑰匙,即是用這n小塊,拼成大門上的正方形,你想知道是否能拼成這把鑰匙開啟迷宮的大門。

輸入輸入包含多組陣列,第一行是乙個整數t(1 <= t <= 10),表示有t組資料。接下裡每組陣列包含整數s,即鎖的邊長,整數n(1 <= n <= 16),即金屬小片的數量,接下來n個整數,分別是各個小片的邊長ci(1 <= ci <= 10)。

輸出每組資料輸出一行,輸出「yes"或者"no",表示是否可以開啟大門。

樣例輸入

2

4 8 1 1 1 1 1 3 1 1

5 6 3 3 2 1 1 1

樣例輸出

yes

no

/*

題型:bfs迷宮問題

難點:如何剪枝,關鍵還是那一點,如何盡可能簡單地定義乙個狀態,使得它能唯一地確定結果。剪枝就是在通過檢測**的狀態來避免走重複的路

*/#include #include #include #include #include #include #include using namespace std;

#define _for(i,a,b) for(int i = (a); i < (b); ++i)

#define _rep(i,a,b) for(int i = (a); i <= (b); ++i)

#define _zero(x) memset(x, 0, sizeof(x))

#define _init(x, v) memset(x, v, sizeof(x))

const int di = , dj = ;

int r, c, k;

char a[105][105];

bool vis[105][105][15];

struct node;

queueq;

void in());}}

}bool inmap(int i, int j)

int bfs());}}

return -1;

}int main()

system("pause");

return 0;

}

4129 變換的迷宮(bfs)

總時間限制 1000ms 記憶體限制 65536kb 描述你現在身處乙個r c 的迷宮中,你的位置用 s 表示,迷宮的出口用 e 表示。迷宮中有一些石頭,用 表示,還有一些可以隨意走動的區域,用 表示。初始時間為0 時,你站在地圖中標記為 s 的位置上。你每移動一步 向上下左右方向移動 會花費乙個單...

迷宮問題bfs

迷宮問題 採用佇列的廣度優先遍歷 bfs 思想是從乙個頂點v0開始,輻射狀地優先遍歷其周圍較廣的區域 找到的解為最優解 include define m 8 define n 8 define maxsize 1000 typedef struct box typedef struct qutype...

迷宮問題BFS

the code 資料結構迷宮.cpp 定義控制台應用程式的入口點。include stdafx.h include include include include define n 4 定義迷宮為4 4 using namespace std struct pot 為記錄路徑的rec準備,座標 x...