⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 跳马.c

📁 骑士遍历问题源代码
💻 C
字号:
/*
  Name: 跳马问题 
  Copyright: 
  Author: 
  Date: 04-12-04 17:46
  Description: 
*/

#include<stdio.h>

int row[8]={1,2,2,1,-1,-2,-2,-1};/*8个方向上的x增量*/
int col[8]={-2,-1,1,2,2,1,-1,-2}; /*8个方向上的y增量*/
int h[5][5];/*记录走的路径*/
int num;/*记录方案个数*/ 

void printSolution();
void try(int,int,int); 

main()
{
	int row,col;
	/*初始化*/
	num=0;
	for(row=0;row<=4;row++)
		for(col=0;col<=4;col++)	
			h[row][col]=0;
	
	/*占据位置(0,0)*/ 
 	h[0][0]=1;
	/*从(0,0)除法,为第二步找位置*/  	 
  	try(0,0,2);
  	
  	/*输出总方案数*/ 
  	printf("总方案数为%d",num); 
  	
  	system("pause");

} 

/*从(x,y)出发,为第i步找合适位置*/ 
void try(int x,int y,int i)
{
    int dir,u,v;
    
    if (i>25) /*已经走完25步,则统计方案个数,打印方案,跳出递归*/
   	{
        num++;
        if (num<=3)/*打印前5种方案*/
            printSolution();
    }     
   	else
        for(dir=0;dir<=7;dir++) /*依次试遍8个方向*/
        {
            u=x+row[dir]; /*得到的新坐标*/ 
            v=y+col[dir];
            if ((u>=0) && (u<=4) && (v>=0) && (v<=4) && (h[u][v]==0))/*如果新坐标在棋盘上,并且这一格可以走*/
            {
                h[u][v]=i;/*占据位置[u,v]*/ 
                try(u,v,i+1); 
                h[u][v]=0;
            }
        } 
} 

/*打印方案*/
void printSolution()
{
    int row,col;
  
    for(row=0;row<=4;row++)
	{ 
		for(col=0;col<=4;col++)	
        	printf("%4d",h[row][col]);
 	    printf("\n");
    }            
    printf("\n\n");
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -