| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 862 人关注过本帖
标题:马桶棋盘 非递归
取消只看楼主 加入收藏
w18709930689
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2016-6-29
收藏
 问题点数:0 回复次数:2 
马桶棋盘 非递归
将马随即放在国际象棋的8×8棋盘Board[8][8]的某个方格中,马按走棋规则进行移动。要求每个方格只进入一次,走遍棋盘上全部64个方格。编制非递归程序,求出马的行走路线,并按求出的行走路线,将数字1,2,……,64依次填入一个8×8的方阵,输出之
搜索更多相关主题的帖子: 国际象棋 Board 马桶 
2016-06-29 21:27
w18709930689
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2016-6-29
收藏
得分:0 
#include <stdio.h>   
#include <iostream.h>   
   
int DirX[]={2,1,-1,-2,-2,-1,1,2};   
int DirY[]={1,2,2,1,-1,-2,-2,-1};   
int Board[8][8];   
   
typedef struct   
{   
 int r;   
 int c;   
}PosType;//定义位置坐标类型   
   
   

int ExitNum(int i,int j,int s,int a[])   
{   
//求(i,j)的出口数和各出口号于a[],s是顺序选择着法的开始序号   
int i1,j1,k,count;   
for(count=k=0;k<8;k++)   
    {   
        i1=i+DirX[(s+k)%8];j1=j+DirY[(s+k)%8];   
        if(i1>=0&&i1<8&&j1>=0&&j1<8&&Board[i1][j1]==0)   
        a[count++]=(s+k)%8;   
    }   
return count;   
}   
   
   
int NextExit(int i,int j,int s)//选下一出口,从s着法顺序选择   
{   
int m,k,kk,min,a[8],b[8],temp;   
m=ExitNum(i,j,s,a); //确定(i,j)的出口个数   
if(m==0) return -1;//没有出口   
for(min=9,k=0;k<m;k++)   
    {//逐一考察各出口   
        temp=ExitNum(i+DirX[a[k]],j+DirY[a[k]],s,b);   
        if(temp<min)   
        {//找出有最少出口的出口   
        min=temp;kk=a[k];   
        }   
    }   
return kk;//返回选中的着法   
}   
   
   
   
void main()   
{   
int sx,sy,i,j,step,no,start; char choices;   
PosType StartPos;   
start=0;      //从0号着法开始顺序检查   
DesignerInfo();   
            printf("input start position:\n");   
            scanf("%d%d",&StartPos.r,&StartPos.c);   
            sx=StartPos.r-1;sy=StartPos.c-1;   
           do{   
               for(i=0;i<8;i++)   
                 for(j=0;j<8;j++)   
                    Board[i][j]=0;//清棋盘   
                    Board[sx][sy]=1;//将初始位置置为第一步   
                    i=sx;j=sy;   
                        for(step=2;step<=64;step++)   
                        {   
                            if((no=NextExit(i,j,start))==-1) break;   
                            i+=DirX[no];//前进一步   
                            j+=DirY[no];   
                            Board[i][j]=step;   
                        }   
                    if(step>64) break;   
                    start++;   
           }   
            while(step<=64);   
            for(i=0;i<8;i++)   
            for(j=0;j<8;j++)   
            {   
                printf("   %4d",Board[i][j]);   
                if(j==7) printf("\n\n");   
            }   
           
2016-06-29 21:27
w18709930689
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2016-6-29
收藏
得分:0 
谁看的懂啊
2016-06-29 21:28
快速回复:马桶棋盘 非递归
数据加载中...
 
   



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

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