马蜂好看 刚学OI 简单问题 萌新 不是妹子(雾
查看原帖
马蜂好看 刚学OI 简单问题 萌新 不是妹子(雾
203453
Foofish楼主2021/2/3 09:48

这段代码一直不能运行,显示的错误总是把c++源码爆出来,求救QAQ,没加优化,只是写完暴力之后想加优化的时候发现运行都运行不了。

如果有智障错误轻点喷。

#define ri register int
#include <bits/stdc++.h>
#define F(_tempi,_tmpa,_tmpb) for(register int _tempi=_tmpa;_tempi<=_tmpb;++_tempi)
using namespace std;
struct Node{
	char s[6][6];int step,x,y;
}; 
Node node(char _s[6][6],int _step){
	int x,y;
	Node tmmmp;
	F(i,1,5)
		F(j,1,5){
			if(_s[i][j]=='*'){
				x=i;
				y=j;
			}
			tmmmp.s[i][j]=_s[i][j];
		}
	tmmmp.step=_step;
	tmmmp.x=x;tmmmp.y=y;
	return tmmmp;
}
deque<Node>Q;
const int n=5;
int T;
map<char[6][6],bool>mp;
const string st[6]={"11111","01111","00*11","00001","00000"};
const int dx[]={2,2,-2,-2,1,-1,1,-1},
		  dy[]={1,-1,1,-1,2,-2,-2,2};
int main()
{
	cin>>T;
	while(T--){
		char ch[6][6];
		F(i,1,5)
			F(j,1,5)
				cin>>ch[i][j];
		Q.clear();
		Q.push_back(node(ch,0));
		mp[ch]=1;
		while(!Q.empty()){
			int fx=Q.front().x,fy=Q.front().y,fstep=Q.front().step+1;
			if(fstep>15) break;
			char tmp[6][6];
			F(i,1,5)
				F(j,1,5)
					tmp[i][j]=Q.front().s[i][j];
			F(i,0,7){
				int nx=fx+dx[i],ny=fy+dy[i];
				//现在的马在nx,ny的位置上。
				if(nx<1||ny<1||nx>n||ny>n)continue;
				swap(tmp[nx][ny],tmp[fx][fy]);
				if(mp[tmp]){
					swap(tmp[nx][ny],tmp[fx][fy]);
##### 					continue;
				}
				Q.push_back(node(tmp,fstep));
				swap(tmp[nx][ny],tmp[fx][fy]);
			}
			Q.pop_front();
		}
		cout<<((Q.back().step>15)?-1:Q.back().step);
	}
    return 0;
}

2021/2/3 09:48
加载中...