1、因为状态是9个数字,也可以看成是9个字符,所以用set来存状态,因为set里不允许有重复的元素。
2、string类的输入用S.push_back();
#include<bits/stdc++.h>
using namespace std;
const double PI=acos(-1.0);
#define _max 0x7fffffff
typedef struct node
{
string _status;
int time;
}node;
int _map[12][12];
set<string>visit;
string _end="111111111";
int bfs(node S)
{
queue<node>Q;
Q.push(S);
while(!Q.empty())
{
node t;
node temp=Q.front();
Q.pop();
if(temp._status==_end)
{
printf("%d\n",temp.time);
return 1;
}
for(int j=0;j<9;j++)
{
string SSS=temp._status;
SSS[_map[j][temp._status[j]-'0']-1]++;
if(SSS[_map[j][temp._status[j]-'0']-1]>'4')
SSS[_map[j][temp._status[j]-'0']-1]='1';
SSS[j]++;
if(SSS[j]>'4')
SSS[j]='1';
t.time=temp.time+1;
t._status=SSS;
if(!visit.count(SSS))
{
Q.push(t);
visit.insert(SSS);
//printf("oijg\n");
}
}
}
return 0;
}
int main()
{
node S;
string K;
for(int i=0;i<9;i++)
{
for(int j=0;j<5;j++)
scanf("%d",&_map[i][j]);
}
for(int i=0;i<9;i++)
K.push_back(_map[i][0]+'0'); //string类型不能用数组那种方式赋值啊。。。
S.time=0;
S._status=K;
visit.insert(K);
if(!bfs(S))
printf("-1\n");
return 0;
}