您的位置:首页 > 其它

九度 1091 棋盘游戏

2012-02-07 16:40 127 查看
http://ac.jobdu.com/problem.php?id=1091

牢记师姐的话~

基本DFS,一开始越界了,搜索了好长时间,后来检查是内存越界了,不过奇怪,怎么没提示啥呢

把方向存数组里,代码可以更短的。还有,某些人喜欢COPY别人的代码,不是好习惯,不管他了。

#include <stdio.h>
#define INF 0x7fffffff
int cost_array[8][8];
int n;
int start_x,start_y,end_x,end_y;
int fin_cost=INF;
bool available(int x,int y)
{
if(!(x>=1&&x<=6&&y>=1&&y<=6))
return false;
if(cost_array[x][y]==0)
return false;
return true;
}
void DFS(int x,int y,int cur_cost,int cur_stat)
{
if(x==end_x&&y==end_y){
if(cur_cost<fin_cost){
fin_cost=cur_cost;
}
return ;
}
if(cur_cost>fin_cost){
return ;
}
int temp;
if(available(x,y+1)){
temp=cost_array[x][y+1];
cost_array[x][y+1]=0;
DFS(x,y+1,cur_cost+temp*cur_stat,(temp*cur_stat)%4+1);
cost_array[x][y+1]=temp;
}
if(available(x,y-1)){
temp=cost_array[x][y-1];
cost_array[x][y-1]=0;
DFS(x,y-1,cur_cost+temp*cur_stat,(temp*cur_stat)%4+1);
cost_array[x][y-1]=temp;
}
if(available(x-1,y)){
temp=cost_array[x-1][y];
cost_array[x-1][y]=0;
DFS(x-1,y,cur_cost+temp*cur_stat,(temp*cur_stat)%4+1);
cost_array[x-1][y]=temp;
}
if(available(x+1,y)){
temp=cost_array[x+1][y];
cost_array[x+1][y]=0;
DFS(x+1,y,cur_cost+temp*cur_stat,(temp*cur_stat)%4+1);
cost_array[x+1][y]=temp;
}
}
int main()
{
while(scanf("%d",&n)!=EOF){
while(n--){
fin_cost=INF;
int i,j;
for(i=1;i<=6;i++){
for(j=1;j<=6;j++){
scanf("%d",&cost_array[i][j]);
}
}
scanf("%d%d%d%d",&start_x,&start_y,&end_x,&end_y);
start_x++;
start_y++;
end_x++;
end_y++;
DFS(start_x,start_y,0,1);//cur_x,cur_y,cur_cost,cor_stat;
printf("%d\n",fin_cost);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: