标签:div names time for font name pop 题目 turn
题目描述
在一个4×4的方格内,有若干个1,每次可以交换0、1的位置,求最少多少步移成目标状态。
思路
这道题和棋盘游戏似乎没有太大区别,只是0、1数量不确定,思路一样,本人就不在写了。(其实代码都一模一样)。
代码
#include <bits/stdc++.h> using namespace std; bool vis[70005]; int step[70005]; queue<int>q; int main() { char s[5]; int a=0,b=0; for(int i=1;i<=4;i++) { scanf(" %s",s); for(int j=0;j<4;j++) a=a*2+s[j]-‘0‘; } for(int i=1;i<=4;i++) { scanf(" %s",s); for(int j=0;j<4;j++) b=b*2+s[j]-‘0‘; } vis[a]=1;step[a]=0; q.push(a); int p; while(!q.empty()) { int now=q.front();q.pop(); if(now==b) { printf("%d",step[now]); break ; } for(int i=0;i<16;i++) { if(i%4&&(now&(1<<i))^(now&(1<<i-1))&&!vis[p=now^(1<<i)^(1<<i-1)]) { vis[p]=1; step[p]=step[now]+1; q.push(p); } if(i<12&&(now&(1<<i))^(now&(1<<i+4))&&!vis[p=now^(1<<i)^(1<<i+4)]) { vis[p]=1; step[p]=step[now]+1; q.push(p); } } } return 0; }
标签:div names time for font name pop 题目 turn
原文地址:https://www.cnblogs.com/fangbozhen/p/11615897.html