[bzoj] 1085 骑士精神 || ID-DFS
2017-12-10 22:42
489 查看
原题
找到最少的步数成为目标状态。
IDDFS(限制层数的dfs)即可
#include<cstdio> #include<algorithm> using namespace std; int t,n,m,disx[10]={0,1,2,2,1,-1,-2,-2,-1},disy[10]={0,2,1,-1 ,-2,-2,-1,1,2},posx,posy,ans; char a[8][8]; int read() { int ans=0,fu=1; char j=getchar(); for (;(j<'0' || j>'9') && j!='-';j=getchar()) ; if (j=='-') j=getchar(),fu=-1; for (;j>='0' && j<='9';j=getchar()) ans*=10,ans+=j-'0'; return ans*fu; } int chk() { int cnt; if (a[3][3]!='*') cnt=1; for (int i=1;i<=5;i++) for (int j=i+(i>=3);j<=5;j++) if (a[i][j]=='0') cnt++; for (int i=5;i>=1;i--) for (int j=1;j<=i-(i<=3);j++) if (a[i][j]=='1') cnt++; return cnt; } bool check() { for (int i=1;i<=5;i++) for (int j=i+(i>=3);j<=5;j++) if (a[i][j]=='0') return 0; for (int i=5;i>=1;i--) for (int j=1;j<=i-(i<=3);j++) if (a[i][j]=='1') return 0; return 1; } bool illegal(int x,int y) { if (x<1 || y<1) return 1; if (x>5 || y>5) return 1; return 0; } void dfs(int x,int px,int py) { if (!x) { if (px==3 && py==3 && check()) ans=1; return ; } for (int i=1;i<=8;i++) { int vx,vy; vx=px+disx[i]; vy=py+disy[i]; if (illegal(vx,vy)) continue; swap(a[vx][vy],a[px][py]); if (chk()<=x) dfs(x-1,vx,vy); swap(a[vx][vy],a[px][py]); } } int main() { t=read(); while (t--) { ans=0; for (int i=1;i<=5;i++) { for (int j=1;j<=5;j++) { a[i][j]=getchar(); if (a[i][j]=='*') posx=i,posy=j; } getchar(); } for (int i=0;i<=15;i++) { dfs(i,posx,posy); if (ans) { printf("%d\n",i); break; } } if (!ans) printf("-1\n"); } return 0; }
相关文章推荐
- BZOJ_1085_[SCOI2005]骑士精神_IDDFS
- BZOJ 1085: [SCOI2005]骑士精神( IDDFS + A* )
- DFS:BZOJ1085-骑士精神
- [bzoj1085][dfs][剪枝]骑士精神
- BZOJ 1085 骑士精神 DFS+A*
- BZOJ 1085 骑士精神 (A*)
- BZOJ 1085: [SCOI2005]骑士精神
- BZOJ大视野 1085: [SCOI2005]骑士精神
- bzoj1085 [SCOI2005]骑士精神
- 【BZOJ】1085: [SCOI2005]骑士精神(A*启发式搜索)
- 【bzoj1085】【SCOI2005】骑士精神
- 【IDA*】BZOJ1085(SCOI2005)[骑士精神]题解
- bzoj1085: [SCOI2005]骑士精神
- BZOJ【1085】骑士精神
- 【bzoj1085】[SCOI2005]骑士精神
- bzoj1085 骑士精神[A*]
- [BZOJ1085]骑士精神(深搜+A*算法)
- bzoj 1085: [SCOI2005]骑士精神
- [BZOJ 1085][SCOI2005]骑士精神(IDA*)
- bzoj 1085: [SCOI2005]骑士精神