编译错误?
  • 板块题目总版
  • 楼主yagyagyag
  • 当前回复13
  • 已保存回复13
  • 发布时间2020/7/4 10:00
  • 上次更新2023/11/6 23:41:39
查看原帖
编译错误?
106619
yagyagyag楼主2020/7/4 10:00
#include<bits/stdc++.h>
using namespace std;
int a[4][4];
struct mm{
	int map,step;
	mm(int a,int b){map=a;step=b;}
};
int cal()
{
	int sum=0,tot=0;
	for (int i=1;i<=3;i++)
		for (int j=1;j<=3;j++)
			sum+=a[i][j]*(1<<tot),++tot;
	return sum;
}
int dx[5]={1,-1,0,0,0},dy[5]={0,0,1,-1,0};
int f[1<<10];
void change(int tag,int &a)
{
	if (a&(1<<(tag-1))==0) a|(1<<(tag-1));//Èç¹ûaµÄµÚtagΪΪ0£¬¾Í±ê¼ÇΪ1 
	else a&~(1<<(tag-1));
}
void bfs()
{
	queue<mm> q;
	q.push(mm(cal(),0));
	f[q.front().map]=0;
	while (!q.empty()){
		mm h=q.front(); q.pop();
		if (h.step>f[h.map]) continue;
		if (h.map==(1<<10)-1){
			printf("%d\n",h.step);
			return;
		}
		for (int i=1;i<=3;i++)
			for (int j=1;j<=3;j++){
				mm tail;
				tail.step=h.step+1;
				tail.map=h.map;
				for (int k=0;k<=4;k++){
					int x=i+dx[k],y=j+dy[k];
					if (x>=1 && x<=3 && y>=1 && y<=3){
						change(3*(x-1)+y,tail.map);
					}
				}
				q.push(mm(tail.map,tail.step));
			}
	}
}
int main()
{
	memset(f,0x3f,sizeof f);
	for (int i=1;i<=3;i++)
		for (int j=1;j<=3;j++)
			cin>>a[i][j];
	bfs();
	return 0;
}
2020/7/4 10:00
加载中...