hdu1429(廣搜 狀態壓縮(位壓縮))

2021-06-20 09:05:38 字數 990 閱讀 5784

一開始用廣搜來做,超記憶體了,然後參照網上的資料,用位壓縮來做,頭一次做這種題,但個人感覺還是很好理解的,稍微看了一下就懂了,然後自己寫了個程式。

思路:乙個有10把鑰匙,用10個位來表示,例如100(4)表示只有第三把鑰匙,1100(12)表示有第三四把鑰匙。

**如下:

#include#include#include#include#include#include#include#include#include#include#include#define eps 1e-9

#define n 25

#define p system("pause")

using namespace std;

int n,m,t;

char a[n][n];

int vis[n][n][1<<10]; //a---j  有10把鑰匙 

int d[4][2]=,,,};

int sx,sy;

struct node

;queueq;

int bfs()

}                                  

else if(a[v.x][v.y]>='a'&&a[v.x][v.y]<='j')        //判斷有沒有這個鑰匙,有的話就能進去 

}else 

}      

}         

}               

}return -1;    

}int main()

{//freopen("input.txt","r",stdin);

//freopen("output.txt","w",stdout);cc

int i,j;                         

while(scanf("%d%d%d",&n,&m,&t)!=eof)

{while(!q.empty())  q.pop();

for(i=0;i

hdu1429 勝利大逃亡 續 (廣搜 狀態壓縮)

是廣搜 狀態壓縮,狀態壓縮就是vis陣列加了乙個狀態表示這個狀態時來過沒,由二進位制01所代表的整數來表示,而狀態的表示由目前所擁有的鑰匙決定,這樣很容易就可以知道,遇到路就步數加一,狀態不變遇到鑰匙就改變狀態,遇到門就 一下看看有沒有鑰匙。自己要注意的是 想當然了,用了 include inclu...

hdu1429位運算狀態壓縮

第一次接觸位運算的狀態壓縮,這題本來我是用優先佇列寫的,用vector儲存鑰匙。本來以為會超時,沒想到是記憶體超限。無奈,找大神,發現正確姿勢是狀態壓縮。這題用來學 位運算的狀態壓縮是相當不錯,很好理解。題意是乙個人在乙個迷宮裡逃生,迷宮有鎖,有鑰匙,相應的鑰匙開相應的鎖。共有10種鎖。利用位運算就...

Hdu 1429(狀態壓縮)

有鑰匙和門的 bfs 狀態壓縮 乙個十把鑰匙和鎖,分別為a,b.j 當所用的步數小於 t即可。include include include includeusing namespace std int n,m,t,ans char map 21 21 int dir 4 2 int vis 21 ...