BFS 搜尋加上hash

2022-05-06 02:33:08 字數 2196 閱讀 6561

最終狀態表示的數值

const

int dx=;

const

int dy=;

int ans = 0

;int hash[65535+100

];void print(int a[5][5

]);unsigned

int num(int a[5][5

]);void copy(int b[5][5],int a[5][5

]);void num_change(unsigned int x,int a[5][5

]);struct

node

intlevel;

unsigned

intx;

};int main(void

) hash[x]=1

; queue

que;

node p = node(0

,x);

que.push(p);

while(!que.empty())

int b[5][5],next_level = temp.level+1

;

//cout << next_level << endl;

num_change(temp.x,b);

for(int i=1;i<=4;i++)}}

}} }}

cout

<

return0;

}void print(int a[5][5

]) cout

<

}}unsigned

int num(int a[5][5

]) }

return

sum;

}void copy(int b[5][5],int a[5][5

])void num_change(unsigned int x,int a[5][5

]) } }

這是乙個通用的方法,還可以使用貪心演算法:

可以先將每一列的0全部移動到這一列的上方,然後如果白色的棋子沒有剛好形成兩行,那麼就依次 將移動之後 最下方的白色棋子移動到黑色棋子最高的地方。

#include#include

#include

using

namespace

std;

int ans[5][5

];int main(void)

} int step = 0

;

for(int j=1;j<=4;j++)

}if(sum0==1) step+=pos-1,ans[2][j]=ans[3][j]=ans[4][j]=1

;

if(sum0==2) step+=pos-1-2,ans[3][j]=ans[4][j]=1

;

if(sum0==3) step+=pos-1-2-3,ans[4][j]=1

;

if(sum0==4) step+=pos-1-2-3-4

; }

bool find = true

;

while

(find)

}if(find) break

; }

bool first=false

;

if(find)

}if(first) break

; }

step+=abs(x1-x2)+abs(y1-y2);

ans[x1][y1]=1

; ans[x2][y2]=0

; }

}cout

<

return0;

}

Krito的討伐(bfs加上優先佇列

krito終於乾掉了99層的boss,來到了第100層。第100層可以表示成一顆樹,這棵樹有n個節點 編號從0到n 1 樹上每乙個節點可能有很多只怪物。krito現在在0號節點,現在它想要區清除這一層所有的怪物。他現在有atk大小的攻擊力。只有當你的攻擊力大於這只怪物的防禦力時,你才可以打敗他,同時...

廣度搜尋bfs

廣度搜尋在acm中應用十分廣泛,英文簡寫是bfs breadth first search 下面先看一下例子 在乙個4 4的矩形中,有一些位置設定有障礙,要求從 1,1 走到 4,4 求最短距離。分析 假設沒有任何障礙,我們可以走的路線如下 起點為 1,1 假設這一步是第一步可以到達的位置 然後它可...

寬度優先搜尋BFS

寬度優先搜尋 bfs,breadth first search 也是搜尋的手段之一。它與深度優先搜尋類似,從某個狀態出發探索所有可以到達的狀態。與深度優先搜尋的不同之處在於搜尋的順序,寬度優先搜尋總是先搜尋距離初始狀態近的狀態。也就是說,它是按照開始狀態 只需1次轉移就可以到達的所有狀態 只需2次轉...