1. 程式人生 > >【UVa】439 Knight Moves(dfs)

【UVa】439 Knight Moves(dfs)

scan sca return true false stdout 沒有 nss logs

題目

題目
?


?

分析

沒有估價函數的IDA。。。。。。
?


?

代碼

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int q,dx[10]={2,2,-2,-2,1,-1,1,-1},dy[10]={1,-1,1,-1,2,2,-2,-2},ans=1<<15;
bool vis[11][11];
int x1,y1,x2,y2;
bool in(int x,int y){ return x>=1&&x<=8
&&y>=1&&y<=8; } void dfs(int x,int y,int num,int p) { if(p>q) return; if(x==x2 && y==y2) { ans=min(ans,num); return; } for(int i=0;i<8;i++) { int px=x+dx[i],py=y+dy[i]; if(!in(px,py) || vis[px][py]) continue; // printf("(%d,%d) -> (%d,%d)\n",x,y,px,py);
vis[px][py]=true; dfs(px,py,num+1,p+1); vis[px][py]=false; } return; } int main() { char s1[20],s2[20]; // freopen("1.txt","w",stdout); while(scanf("%s%s",s1,s2)==2) { memset(vis,0,sizeof(vis)); ans=1<<15;q=0
; y1=s1[0]-'a'+1; x1=s1[1]-'0'; y2=s2[0]-'a'+1; x2=s2[1]-'0'; vis[x1][y1]=true; while(ans==1<<15) { dfs(x1,y1,0,0); q++; } printf("To get from %s to %s takes %d knight moves.\n",s1,s2,ans); } return 0; }

【UVa】439 Knight Moves(dfs)