讨论 / 这题马的移动方法MS和国际象棋中的一样- -+
majia5 2008-11-14 04:49:00
点我顶贴 收藏 删除
日字走法...orz...
#1 飞雪天涯@2008-11-14 04:47:00
回复 删除
1,2哈是2,3?
#2 飞雪天涯@2008-11-14 04:49:00
回复 删除
WA 5

#include<iostream>

#define MAXW 10

#define MAXL 9

#define OVERFLOW MAXW*MAXL+1

using namespace std;

int dp[MAXW+2][MAXL+2];

bool visited[MAXW+2][MAXL+2];

int dir[8][2]={

{3,2},

{2,3},

{-3,2},

{-2,3},

{3,-2},

{2,-3},

{-3,-2},

{-2,-3}

};

bool check(int x,int y){

if (x<1||x>10) return false;

if (y<1||y>9) return false;

if (x==1&&y==4) return false;

if (x==1&&y==6) return false;

if (x==2&&y==5) return false;

return true;

}

int dfs_try(int x,int y){

if (!check(x,y)) return OVERFLOW;

if (visited[x][y]) return OVERFLOW;

if (dp[x][y]!=-1) return dp[x][y];

dp[x][y]=OVERFLOW;

visited[x][y]=true;

for (int i=0;i<8;i++){

int way=dfs_try(x+dir[i][0],y+dir[i][1])+1;

if (way<dp[x][y]) dp[x][y]=way;

}

visited[x][y]=false;

return dp[x][y];

}

int main (void){

memset(dp,-1,sizeof(dp));

memset(visited,false,sizeof(visited));

dp[1][5]=0;

int x,y;cin>>x>>y;

int ans=dfs_try(x,y);

if (ans==OVERFLOW) cout<<"No Answer";

else cout<<ans;

//while (1);

return 0;

}

/*

2 2

----

2

*/

WA 1

#include<iostream>

#define MAXW 10

#define MAXL 9

#define OVERFLOW MAXW*MAXL+1

using namespace std;

int dp[MAXW+2][MAXL+2];

bool visited[MAXW+2][MAXL+2];

int dir[8][2]={

{1,2},

{2,1},

{-1,2},

{-2,1},

{1,-2},

{2,-1},

{-1,-2},

{-2,-1}

};

bool check(int x,int y){

if (x<1||x>10) return false;

if (y<1||y>9) return false;

if (x==1&&y==4) return false;

if (x==1&&y==6) return false;

if (x==2&&y==5) return false;

return true;

}

int dfs_try(int x,int y){

if (!check(x,y)) return OVERFLOW;

if (visited[x][y]) return OVERFLOW;

if (dp[x][y]!=-1) return dp[x][y];

dp[x][y]=OVERFLOW;

visited[x][y]=true;

for (int i=0;i<8;i++){

int way=dfs_try(x+dir[i][0],y+dir[i][1])+1;

if (way<dp[x][y]) dp[x][y]=way;

}

visited[x][y]=false;

return dp[x][y];

}

int main (void){

memset(dp,-1,sizeof(dp));

memset(visited,false,sizeof(visited));

dp[1][5]=0;

int x,y;cin>>x>>y;

int ans=dfs_try(x,y);

if (ans==OVERFLOW) cout<<"No Answer";

else cout<<ans;

//while (1);

return 0;

}

/*

2 2

----

2

*/

查看更多回复
提交回复