本題目由於普通的個子可以重複走(在樣例三中可以看出),所以不能通過標記位限制只能走一次,但是需要進行一定的限制防止無限的迴圈。實際上,為4的格仔只需要走一次,重複走只會使得步數變的更多,並不會增加到達目標位置的能力,因此,在bfs中,只需要限制重置點只能走一次即可。 其他格仔,除了起點以外,都可以重複走。
#include #include #include #include #include using namespace std;
int n,m;
int graph[10][10],sx,sy,ex,ey;
bool flag;
int res;
int dx = ;
int dy = ;
struct node; //需要記錄兩個資訊,當前剩餘時間以及已經使用的步數
void input()
if(graph[xx][yy]==4)
q.push(tmp);}}
}return -1;
}int main()
return 0;
}
在dfs中,需要加一定的剪枝,即如果到達當前的位置,比之前到達當前位置的步數更長,並且剩餘時間更短,則表示當前這個狀態沒必要進行下去,一定不會產生最優解。void dfs(int x,int y,int len,int cnt)
}
hdu1072 bfs 剪枝(每一點可重複走過)
題目鏈結 nightmare 炸彈 的限時是6s,一步減掉1s,在 4 方塊上炸彈 時間重置為6s 但是走到 4 和終點時的剩餘時間必須大於0 最短路徑 bfs 注意每點可以重複走過,必須剪枝,否則就停不下來了 如果第二次走過 1 時,bomb的剩餘時間比之前更短,那就不用走了,不值得 第二次走過 ...
hdu1072 逃離迷宮系列 bfs
題意 逃離迷宮,路中可能有炸彈,總時間是6個單位,在有炸彈的位置,如果到達的時刻時間大於0,則恢復到6時間,炸彈的位置可以重複到達,求出最終至少需要多少步才能走出迷宮,到達終點。這樣的最優化問題和地圖相關的,bfs應該足以解決。我們考慮到乙個位置可能被多次訪問,所以狀態引數應該設定乙個時間,設定為訪...
HDU 5438拓撲 bfs或者dfs
題意 有個人有p個池塘,每乙個池塘有其價值,池塘之間有連線的管道,現在主人由於資金的問題,需要拋棄一些池塘,其特點是與之相鄰的池塘只有乙個,當然如果刪除了乙個池塘之後剩下的池塘仍然有類似的池塘還要接著刪除。刪除之後,問連通圖中池塘的個數為奇數個的連通圖所有池塘的價值和。思路 記錄每乙個池塘所連線的邊...