| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 525 人关注过本帖
标题:马的遍历问题
只看楼主 加入收藏
buxx8020882
Rank: 2
等 级:论坛游民
帖 子:4
专家分:10
注 册:2009-7-21
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:2 
马的遍历问题
用贪心算法写了个马的遍历的程序,我试了很多种情况,只有起始点在 3,3时出错误,谁能给改下么
代码:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
typedef struct
{
    int x,y,waysout;
}hnode;
int h[8][8];
int dx[8]= { 2, 1, -1, -2, -2, -1, 1, 2 };   
int dy[8]= { 1, 2, 2, 1, -1, -2, -2, -1 };   

   
int ways(int x,int y)
{
    int i,count=0,tx,ty;
    if(x<0||y<0||x>7||y>7||h[x][y]!=0)
        return(-1);
    for(i=0;i<8;i++)
    {
        tx=x+dx[i];
        ty=y+dy[i];
        if(tx<0||ty<0||tx>7||ty>7)
            continue;
        if(h[tx][ty]==0)
            count++;
    }
    return(count);
}
void sortnode(hnode hn[8],int n)
{
    int i,j,min,k;
    hnode temp;
    for(i=0;i<n;++i)
    {
        min=hn[i].waysout;
        k=i;
        for(j=i+1;j<n;++j)
            if(hn[j].waysout<min)
          {
              min=hn[j].waysout;
              k=j;
          }
        if(k!=i)
        {
            {    temp.x=hn[i].x;
            temp.y=hn[i].y;
            temp.waysout=hn[i].waysout;
          }
           {  hn[i].x=hn[k].x;
            hn[i].y=hn[k].y;
            hn[i].waysout=hn[k].waysout;
         }
           {  hn[k].x=temp.x;
            hn[k].y=temp.y;
            hn[k].waysout=temp.waysout;
         }
        }
    }

}

int dfs(int x,int y,int count)
{
    int i,j,tx,ty;
    hnode hn[8];
    if(count>8*8)
    {
      return;
    }
    else
    {    
        for(i=0;i<8;++i)
        {
            hn[i].x=tx=x+dx[i];
            hn[i].y=ty=y+dy[i];
            hn[i].waysout=ways(tx,ty);
        }
    
        sortnode(hn,8);
            
        for(i=0;hn[i].waysout<0;++i){};
        tx=hn[i].x;
        ty=hn[i].y;
        h[tx][ty]=count;
        dfs(tx,ty,count+1);
                    
    }
}

void main()
{
    int x,y,i,j;
    
    printf("please input x and y:");
    scanf("%d,%d",&x,&y);
    while(x<0||y<0||x>7||y>7)
    {
        printf("please reput x and y again:");
        scanf("%d,%d",&x,&y);
    }
    for(i=0;i<8;i++)
        for(j=0;j<8;j++)
            h[i][j]=0;
    h[x][y]=1;
    dfs(x,y,2);
    for(i=0;i<8;i++)
        {
            for(j=0;j<8;j++)
            printf("%d   ",h[i][j]);
            printf("\n");
        }
    getch();
}
另外谁能用C语言演示下马走64个格子的过程,我对画图这方面不太懂,谢谢了!

[[it] 本帖最后由 buxx8020882 于 2009-7-24 16:28 编辑 [/it]]
搜索更多相关主题的帖子: 遍历 
2009-07-24 16:26
zs6155749
Rank: 1
等 级:新手上路
帖 子:3
专家分:7
注 册:2009-7-24
收藏
得分:7 
   这个我也不会   期待高人解决  学习一下
2009-07-24 16:32
buxx8020882
Rank: 2
等 级:论坛游民
帖 子:4
专家分:10
注 册:2009-7-21
收藏
得分:0 
回复 2楼 zs6155749
呵呵,期待高人来解决
2009-07-24 16:51
快速回复:马的遍历问题
数据加载中...
 
   



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

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