3 条题解
-
1
#include<cstdio> #include<iostream> #include<cstring> #define INF 536870912 using namespace std; char map[6][6]; char check[6][6]={ '0','0','0','0','0','0', '0','1','1','1','1','1', '0','0','1','1','1','1', '0','0','0','*','1','1', '0','0','0','0','0','1', '0','0','0','0','0','0', }; int xm[9]={0,-2,-2,-1,-1,1,1,2,2}; int ym[9]={0,-1,1,-2,2,-2,2,-1,1}; int ans; inline void swap(char &p1,char &p2){ char mid=p1; p1=p2; p2=mid; } inline int dif(){ int ret=0; for(int i=1;i<=5;i++){ for(int j=1;j<=5;j++){ if(map[i][j]!=check[i][j]) ret++; } } return ret; } inline void dfs(int x,int y,int d,int f){ int l=dif(); if(d+l>16) return ; if(d>=ans) return ; if(l==0){ ans=d; return ; } for(int i=1;i<=8;i++){ if((x+xm[i]<1)||(x+xm[i]>5)) continue; if((y+ym[i]<1)||(y+ym[i]>5)) continue; if(f+i!=9){ swap(map[y+ym[i]][x+xm[i]],map[y][x]); dfs(x+xm[i],y+ym[i],d+1,i); swap(map[y+ym[i]][x+xm[i]],map[y][x]); } } } inline void init(){ int x,y; for(int i=1;i<=5;i++) cin>>map[i]+1; for(int i=1;i<=5;i++){ for(int j=1;j<=5;j++){ if(map[i][j]=='*') { x=j; y=i; } } } ans=25; dfs(x,y,0,0); printf("%d\n",ans==25?-1:ans); } int main(){ int t; scanf("%d",&t); while(t--)init(); return 0; }
信息
- ID
- 106
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 1
- 标签
- 递交数
- 56
- 已通过
- 45
- 上传者