为什么这么简单就A了???是数据太水了吗???
查看原帖
为什么这么简单就A了???是数据太水了吗???
46694
少帅_zjm楼主2021/3/5 23:16

纯暴力bfs 直接过了

#include<bits/stdc++.h>
using namespace std;
struct node
{
	string s;int num;int sum;
	node()
	{
		s="";
		num=0;sum=0;
	}
};

int d[5]={0,-1,1,3,-3};
string ans="123804765";
int main()
{
 	freopen("in.txt","r",stdin);
	node chu;
	map<string,int> mp;
	/*for(int i=1;i<=3;i++)
	for(int j=1;j<=3;j++)
	{
		char c;
		cin>>c;
	}*/
	cin>>chu.s;
	for(int i=0;i<chu.s.size();i++)
	if(chu.s[i]=='0') chu.num=i;
	queue<node> q;
	q.push(chu);
	while(!q.empty())
	{
		node lin=q.front();
		q.pop();
//		cout<<lin.s<<endl; 
		if(lin.s==ans) 
		{
			cout<<lin.sum<<endl;
			return 0;
		}
		if(mp[lin.s]!=10) mp[lin.s]=10;
		else
		{
//			delete(lin);
			continue;
		}
        for(int i=1;i<=4;i++)
        {
        	if((lin.num==2 || lin.num==5) && d[i]==1) continue;
        	if((lin.num==3 || lin.num==6) && d[i]==-1) continue;
        	if(lin.num+d[i]<0 || lin.num+d[i]>8) continue;
        	node t=lin;
        	swap(t.s[t.num],t.s[t.num+d[i]]);
        	t.num+=d[i];
        	t.sum++;
        	q.push(t);
//        	delete(t);
		}
	}
}
2021/3/5 23:16
加载中...