| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 913 人关注过本帖
标题:菜鸟的马踏棋盘程序...运行的效率很低,对7*7的棋盘就很慢了
只看楼主 加入收藏
TLZL
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2007-10-18
收藏
 问题点数:0 回复次数:0 
菜鸟的马踏棋盘程序...运行的效率很低,对7*7的棋盘就很慢了
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#define N 6  //棋盘的大小
int jump(int i,int j,int a[N][N],int);//可以向a[i][j]跳一步,就是把a[i][j]赋值
void horse(int ,int ,int,int [][N]);//递归主程序
void outplan(int a[N][N]);//把最后的结果输出

int x,y;
void  copy(int[][N],int [][N]);
//程序构造了两个棋盘save[N][N],sum[N][N],主要是为了回溯的时候用
main(){


 printf("Please input start position:");
 //printf("%2d",N*N);
 printf("\n");
 scanf("%d%d",&x,&y); //输入起始位置
 int sum[N][N]={0};
 int times=1;
 sum[x-1][y-1]=0;
 //outplan(sum);
 horse(x-1,y-1,times,sum);//运行递归程序
 system("pause");
}
void horse(int i,int j,int times,int sum[][N]){
 
 int h[]={1,2,2,1,-1,-2,-2,-1},//构造八个方向的走法
     v[]={2,1,-1,-2,2,1,-1,-2},
   save[N][N],ti=0,tj=0,count=0,kk=0;
   
    if(times==N*N+1/*&&check(i,j)*/)
        outplan(sum);//输出结果
      
      else{
        copy(save,sum);  //构造另一个棋盘
       for(count=0; count<=7 ;count++){
          ti=i+h[count];                 
          tj=j+v[count];
         
          if(jump(ti,tj,save,times)){  //检验并且下子
           
            kk=times+1;  
            horse(ti,tj,kk,save); //递归执行
            save[ti][tj]=0;  //回溯以后,恢复原值
                                     }
                                       }
          }                           
}
int jump(int i,int j,int a[N][N],int times)
{
 if(i<N&&i>=0&&j<N&&j>=0&&a[i][j]==0){
     a[i][j]=times;                                 
     return 1;
     }
 return 0;
}
void outplan(int a[N][N]){
 int i,j;
 for(i=0;i<N;i++){
  for(j=0;j<N;j++)
   printf("%3d",a[i][j]);
  printf("\n");
 }
 
 printf("\n");
 system("pause");
 //getchar();
}
void  copy(int save[][N],int sum[][N])
{
      for(int i=0;i<=N-1;i++)
        for(int j=0;j<=N-1;j++)
           save[i][j]=sum[i][j];
}
搜索更多相关主题的帖子: int 棋盘 windows 
2008-03-20 16:27
快速回复:菜鸟的马踏棋盘程序...运行的效率很低,对7*7的棋盘就很慢了
数据加载中...
 
   



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

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