超级暴力广搜
2024-06-01 13:44:05
发布于:广东
15阅读
0回复
0点赞
#include <iostream>
#include <cstdio>
#include <queue>
using namespace std;
bool vis[2][2][2][2][2][2][2][2][2];
struct node{
int a[10];
int step = 0;
};
int dir[9][5] = {{1, 2, 0, 4, 0}, {1, 2, 3, 5, 0}, {0, 2, 3, 6, 0}, {1, 4, 5, 0, 7}, {2, 4, 5, 6, 8}, {0, 3, 5, 6, 9}, {0, 4, 7, 8, 0}, {0, 5, 7, 8, 9}, {0, 6, 0, 8, 9}};
bool check(node tmp){
for(int i = 1; i <= 9; i++) if(!tmp.a[i]) return 0;
return 1;
}
int bfs(node n){
queue <node> q;
q.push(n);
while(!q.empty()){
node head = q.front();
q.pop();
if(check(head)) return head.step;
for(int i = 0; i < 9; i++){
node tmp = head;
tmp.step++;
for(int j = 0; j < 5; j++){
tmp.a[dir[i][j]] ^= 1;
}if(!vis[tmp.a[1]][tmp.a[2]][tmp.a[3]][tmp.a[4]][tmp.a[5]][tmp.a[6]][tmp.a[7]][tmp.a[8]][tmp.a[9]]){
vis[tmp.a[1]][tmp.a[2]][tmp.a[3]][tmp.a[4]][tmp.a[5]][tmp.a[6]][tmp.a[7]][tmp.a[8]][tmp.a[9]] = 1;
q.push(tmp);
}
}
}return -1;
}
int main(){
node n;
for(int i = 1; i <= 9; i++){
cin >> n.a[i];
}cout << bfs(n);
return 0;
}
参考链接描述
这里空空如也
有帮助,赞一个