0 1BFS 學習記錄

2021-07-23 13:34:28 字數 2867 閱讀 4072

0-1bfs用來解決:邊權值為0或1,或者能夠轉化為這種邊權值的最短路問題,時間複雜度為o(e+v).

0-1bfs,從佇列front中去除點u,遍歷u的所有邊,如果當前邊可以進行relax操作,則relax,然後判斷level,若level相同,放到佇列的front,否則,放到back,佇列採用雙端佇列deque。

實際上跟最短路挺像。

另外:由於鬆弛操作的存在,0-1bfs可以去掉vis陣列,而且速度會更快。

spojkaththi kaththi

題目鏈結

題解,赤裸裸的0-1bfs

#include#define mem(a,x) memset(a,x,sizeof(a));

#define meminf(a) memset(a,0x3f,sizeof(a));

using namespace std;

typedef long long ll;

const int maxn=1e3+10;

const int inf=0x3f3f3f3f;

const int mod=1000000007;

int dp[maxn][maxn];

char mp[maxn][maxn];

bool vis[maxn][maxn];

int dx=;

int dy=;

int n,m;

struct node now,nex;

dequeq;

void bfs() ;

int dy[8]=;

struct node s,t,now,nex;

bool vis[maxn][maxn];

int dis[maxn][maxn];

int n,m,k;

char mp[maxn][maxn];

void bfs() ;

int dy=;

int n,m;

struct node now,nex;

void bfs(int num)

}}  while(!q.empty())  }}}

int main()

puts("");

}puts("\n");

}  */

for (int i=1; i<=n; ++i)

}}  if (ans==inf) puts("-1");

else printf("%d\n",ans);

}

gym 100625j  jailbreak

題意:n×m的圖代表牆,有兩個$符號代表犯人,#代表門,*代表牆,' . '代表路,開啟乙個門需要耗時,走路不需要耗時,當乙個犯人開啟一扇門後,該門便一直處於開啟狀態,問最少需要開啟多少扇門,才能使兩個犯人都逃出去。

題解:跟上面那題一模一樣,換個殼子,我們只要統計每個犯人到每個點的最小開門數,然後求邊界上每個非牆點到圖內每個點的最小開門數,然後列舉相加找最小值就好了。

0-1判斷為優先走路,front,否則back。

**:

#include#define mem(a,x) memset(a,x,sizeof(a));

#define meminf(a) memset((a),0x3f,sizeof(a));

using namespace std;

typedef long long ll;

const int maxn=1e2+10;

const int inf=0x3f3f3f3f;

const int mod=1000000007;

int dx=;

int dy=;

int n,m;

char mp[maxn][maxn];

int dis[500][maxn][maxn];

struct node s;

vectorres;

vectorpris;

bool vis[maxn][maxn];

void bfs(int num) }}}

int main ()

}for (int i=0; i

uvalive 6011 error

題意:有n對機場,每對機場都可買去程和回程票,現給k張票,代表已經買的,要求從s到t,在最少需要再買的票數情況下,中轉次數也要最少。

**:#include#define mem(a,x) memset(a,x,sizeof(a));

#define meminf(a) memset(a,0x3f,sizeof(a));

using namespace std;

typedef long long ll;

const int maxn=1e6;

const int inf=0x3f3f3f3f;

const int mod=1000000007;

int hash(char *s)

int s,t;

struct edgeedge[maxn];

int head[maxn];

int top;

void addedge(int u,int v,int w)

int dis[maxn];

int booking[maxn];

void bfs()

else }}

} printf("%d\n",dis[t]);

}string st,ed;

int main()

hb=ha;

scanf("%s",a);

ha=hash(a);

addedge(hb,ha,0);

}ed=a;

t=ha;

bfs();

}}

暑期學習記錄01

使用者定義函式,遞迴函式相關問題 判斷乙個數即是素數,又是回文數 num 222 defis palin num num p 0 num t num while num t 0 num p num p 10 num t 10 num t num t 10 if num p num return tr...

爬蟲學習記錄 01

在檔案儲存及資料型別中的一些小問題 結語python 3.6 使用原生自帶的 urllib 模組進行爬蟲的開始 匯入模組urllib的request框架 import urllib.request 使用urlopen方法模擬使用者開啟網頁,以www.baidu.com為例。import urllib...

Git學習記錄01

版本管理演變 vsc 版本控制出現前 用目錄區分版本 如 v1.0 v2.0 v3.0.缺點 公共檔案容易被覆蓋,不便於管理 效率低 版本管理演變 開始有集中式 vsc 有統一伺服器,所有檔案放在一起具備檔案版本管理和分支管理能力但是客戶端必須時刻與伺服器連線,太依賴網路,不夠方便。分布式vcs出現...