Sicily 1048: Inverso(BFS)
2024-08-28 00:45:05
题意是给出一个3*3的黑白网格,每点击其中一格就会使某些格子的颜色发生转变,求达到目标状态网格的操作。可用BFS搜索解答,用vector储存每次的操作
#include<bits/stdc++.h>
using namespace std; struct Node{
int num;//储存状态
vector<int> path;//储存操作
};
int visit[];
int click(int i, int num){
int tmp = ;
switch(i){
case :tmp = num ^ ; break;//点击第0位,则0、1、3、4位取反,这里用异或实现,点击其他的同理
case :tmp = num ^ ; break;
case :tmp = num ^ ; break;
case :tmp = num ^ ; break;
case :tmp = num ^ ; break;
case :tmp = num ^ ; break;
case :tmp = num ^ ; break;
case :tmp = num ^ ; break;
case :tmp = num ^ ; break;
}
return tmp;
} Node bfs(int n){
queue<Node> q;
Node front;
front.num = n;
q.push(front);
while(!q.empty()){
front = q.front(); q.pop(); for(int i = ; i < ; i++){
Node tmp = front;
tmp.num = click(i, front.num);
tmp.path.push_back(i+); if(tmp.num == ) return tmp;
else{
if(!visit[tmp.num]){
q.push(tmp);
visit[tmp.num] = ;
}
}
}
}
} int main(){
int n;
cin >> n;
while(n--){
string s;
cin >> s;
int num = ;
for(int i = ; i < s.size(); i++){
if(s[i] == 'b')num = *num + ;
else if(s[i] == 'w') num = *num;
}
memset(visit, , sizeof(visit));
visit[num] = ;
Node tmp = bfs(num);
for(int i = ; i < tmp.path.size(); i++){
cout << tmp.path[i];
}
cout << endl;
}
}
最新文章
- Java正则速成秘籍(三)之见招拆招篇
- spdk intel
- String类实现
- 合并master分支到自己的分支
- range与xrange之间的差异(转)
- Hibernate(六)——多对多关联映射
- 用纯css改变select的下拉菜单
- iOS9 系统分享调用(UIActivityViewController)
- 再回首数据结构—数组(Golang实现)
- flask 第五章 WebSocket GeventWebsocket 单聊群聊 握手 解密 加密
- win10jdk环境变量配置问题:&#39;javac&#39; 不是内部或外部命令,也不是可运行的程序 或批处理文件。
- unigui+fastreport报表打印
- 从零开始一起学习SLAM | 学习SLAM到底需要学什么?
- delphi 程 序从exe运行改成dll库
- git gitlab 使用 提交代码解决冲突
- 【应用】for:批量修改文件名
- Ubuntu 安装ipython
- Xcode真机调试iOS10中Nslog 打印不出东西
- 图解利用vmware工具进行虚拟机克隆
- python 定义类 学习1