| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 400 人关注过本帖
标题:八数码程序运行不对
取消只看楼主 加入收藏
ltx151604740
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-10-19
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
八数码程序运行不对
是我写的一个用A算法解八数码的问题,编译通过了,但运行有些结果不对,麻烦各位大侠帮我找一下错
#include<stdio.h>
int E=0;
int B[9]={1,2,3,8,0,4,7,6,5};//目标状态

void produce(int a[200][14],int i,int j);
void sort(int a[200][14],int i);
void output(int a[200][14],int j);


main(){
  int N=0,c;
  int A[200][14]={{2,8,3,1,0,4,7,6,5,0,3,3,4,5}};//初始状态
  for(;A[N][10];){//A[N][10]存的是好h(n)值,当为0时循环结束
  c=A[N][12];//A[N][12]存的是零的位置
  produce(A,N,c);//产生节点
  N++;
  sort(A,N);//排列节点,下一个节点保持是F(N)最小的节点
 }
 output(A,N);
}

 


void produce(int a[200][14],int i,int j){
    int p,q;
 //up
 if((j>2)&&(a[i][13]!=1)){
  E++;
  for(p=0;p<=8;p++){a[E][p]=a[i][p];}
  a[E][j-3]=0;
  a[E][j]=a[i][j-3];
  a[E][9]=a[i][9]+1;//当前节点的深度
  p=0;q=0;
  for(;p<=8;p++){
   if((a[E][p]!=B[p])&&(a[E][p]!=0)){
    q++;}
  }
  a[E][10]=q;//h(n)的值
  a[E][11]=a[E][9]+a[E][10];//f(n)的值
  a[E][12]=j-3;//0的位置
  a[E][13]=0;//该节点是由上移得到的,0代表上,1代表下,2代表左,3代表右
 }
//down
 if((j<=5)&&(a[i][13]!=0)){
  E++;
  for(p=0;p<=8;p++){a[E][p]=a[i][p];}
  a[E][j+3]=0;
  a[E][j]=a[i][j+3];
  a[E][9]=a[i][9]+1;
  p=0;q=0;
  for(;p<=8;p++){if((a[E][p]!=B[p])&&(a[E][p]!=0)){q++;}}
  a[E][10]=q;
  a[E][11]=a[E][9]+a[E][10];
  a[E][12]=j+3;
  a[E][13]=1;
 //left
 if((j!=0)&&(j!=3)&&(j!=6)&&(a[i][13]!=3)){
  E++;
  for(p=0;p<=8;p++){a[E][p]=a[i][p];}
  a[E][j-1]=0;
  a[E][j]=a[i][j-1];
  a[E][9]=a[i][9]+1;
  p=0;q=0;
  for(;p<=8;p++){if((a[E][p]!=B[p])&&(a[E][p]!=0)){q++;}}
  a[E][10]=q;
  a[E][11]=a[E][9]+a[E][10];
  a[E][12]=j-1;
  a[E][13]=2;
 }
 //right
 if((j!=2)&&(j!=5)&&(j!=8)&&(a[i][13]!=2)){
  E++;
  for(p=0;p<=8;p++){a[E][p]=a[i][p];}
  a[E][j+1]=0;
  a[E][j]=a[i][j+1];
  a[E][9]=a[i][9]+1;
  p=0;q=0;
  for(;p<=8;p++){if((a[E][p]!=B[p])&&(a[E][p]!=0)){q++;}}
  a[E][10]=q;
  a[E][11]=a[E][9]+a[E][10];
  a[E][12]=j+1;
  a[E][13]=3;
}
}
}


void sort(int a[200][14],int i){
  int j=i;
  int t,x;
  int min=a[i][11];
  for(i=i+1;i<=E;i++){
   if(a[i][11]<=min){
    for(x=0;x<=13;x++){
     t=a[j][x];
        a[j][x]=a[i][x];
     a[i][x]=t;}}
  }
}
  




void output(int a[20][14],int j){
 int p,q;
 for(p=0;p<=j;p++){
  for(q=0;q<=8;q++){
     printf("%d %d %d",a[p][q],a[p][q+1],a[p][q+2]);
     printf("\n");
     q=q+2;}
 printf("\n");
    printf("\n");
 }
}
搜索更多相关主题的帖子: 数码 运行 
2010-10-19 12:36
ltx151604740
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-10-19
收藏
得分:0 
那位大侠有空帮我一下呀
2010-10-19 16:18
ltx151604740
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-10-19
收藏
得分:0 
回复 6楼 逐渐学习
六楼,太感谢你了,大侠,难得你这么仔细帮我看。
2010-10-24 00:29
快速回复:八数码程序运行不对
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016546 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved