首页 > 代码库 > 【BZOJ】1085: [SCOI2005]骑士精神
【BZOJ】1085: [SCOI2005]骑士精神
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1085
$${if (cs+val-1>ans) return ;}$$
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<vector> 5 #include<cstdlib> 6 #include<cmath> 7 #include<cstring> 8 using namespace std; 9 #define maxn 1001010 #define llg long long 11 #define yyj(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);12 llg n,m,ans,stx,sty,T;13 bool pd;14 char s[10][10];15 char aim[8][8]={"000000","011111","001111","000*11","000001","000000"}; 16 llg p[8][2]={{1,2},{-1,2},{-1,-2},{1,-2},{-2,-1},{-2,1},{2,-1},{2,1}}; 17 18 llg cal()19 {20 llg sum=0;21 for (llg i=1;i<=5;i++) 22 for (llg j=1;j<=5;j++)23 if (s[i][j]!=aim[i][j]) sum++;24 return sum;25 }26 27 void ss(llg cs,llg x,llg y)28 {29 if (cs>ans || pd) return ;30 llg val=cal();31 if (val==0) {pd=1; return ;}32 if (cs>ans) return ;33 if (cs+val-1>ans) return ;34 for (llg i=0;i<8;i++)35 {36 llg nx=x+p[i][0],ny=y+p[i][1];37 if (nx<1 || ny<1 || nx>5 || ny>5) continue;38 swap(s[x][y],s[nx][ny]);39 ss(cs+1,nx,ny);40 swap(s[x][y],s[nx][ny]);41 }42 }43 44 int main()45 {46 yyj("bzoj1085");47 cin>>T;48 while (T--)49 {50 for (llg i=1;i<=5;i++) cin>>(s[i]+1);51 for (llg i=1;i<=5;i++)52 for (llg j=1;j<=5;j++)53 if (s[i][j]==‘*‘)54 stx=i,sty=j;55 for (ans=0;ans<=15;ans++)56 {57 pd=0;58 ss(0,stx,sty);59 if (pd) break;60 }61 if (ans==16) ans=-1;62 cout<<ans<<endl;63 }64 return 0;65 }
【BZOJ】1085: [SCOI2005]骑士精神
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。