UVa 1601 萬聖節後的早晨

2022-06-20 23:42:09 字數 1232 閱讀 7016

題意:給出w*h的網格,相當於迷宮,有大寫字母和小寫字母,算出小寫字母走到大寫字母狀態時的最少步數。

思路:建立新圖,然後再bfs。

1 #include2 #include

3 #include4 #include5

using

namespace

std;67

const

int maxn = 16 * 16;8

9char map[20][20

];10

intw, h, n;

11int cnt; //

非#結點個數

12int

x[maxn], y[maxn];

13int s[3], t[3]; //

記錄初末位置

14int deg[maxn]; //

記錄每個格仔相連的格仔數

15int g[maxn][maxn]; //

記錄每個格仔可以走的位置

16int new_map[20][20]; //

新圖17

int d[maxn][maxn][maxn]; //

記錄步數

1819

int dx = ;

20int dy = ;

2122

int id(int x, int y, int z) //

二進位制壓縮儲存,方便進出佇列

2326

27bool judge(int a, int b, int a2, int

b2)28

3132

void

bfs()

3350

for (int i = 0; i < deg[a]; i++)

5166}67

}68}69

}707172

intmain()

7395}96

}9798for (int i = 0; i < cnt; i++)

99106

}107

108//

如果不滿三個鬼,強行新增結點使之構成三個結點

109110

if (n <= 2) //

新增虛擬結點

111114

if (n <= 1

)115

118119

bfs();

120}

121return0;

122 }

BFS特訓 萬聖節後的早晨(UVA1601)

解題思路 直接bfs列舉會存在大量重複的判斷,題目中明示每4個至少有乙個 且圖中空格 部分形成連通塊,故可以將能夠行走的路徑單獨抽離出來。這裡可以利用vector陣列的方式,每個位置連線可以行走的下乙個位置,以此進行遍歷。另一點即是可以將x,y座標轉換成一維的整數,方便查詢。題目描述 小寫字母a,b...

2018 10 3 萬聖節的快遞

lazyjazz還是小白菜的時候 棧就好比乙個垃圾桶 chxer 今天 lazyjazz的1月1日大買特買的訂單今天 11月1日 終於到貨了,演算法 sf 快遞公司把lazyjazz訂單裡所有的快件分到了兩列火車上,一列上午到站,一列下午到站。收到通知的lazyjazz無比激動,開上了他花了半年時間...

萬聖節的小L

萬聖節的小l 題目描述 今天是萬聖節,小l同學開始了一年一度的討要糖果遊戲,但是在剛剛過去的比賽中小有成就的他打算給自己增加一點難度 如果沒有討到每一家的糖果就算輸。已知小l共有n n不大於10000 個鄰居,他們都在同一條街上 可以近似看成一條直線 第i個鄰居的座標是xi。l同學的媽媽會在一開始把...