新人 C语言 马走日 遍历棋盘的问题

Python013

新人 C语言 马走日 遍历棋盘的问题,第1张

#include <stdio.h>

#include <memory.h>

typedef struct

{

 int x, y

}item

item move[4] = {{-2,1}, {-1,2}, {1,2}, {2,1}}

int map[5][9], sx, sy

//判断是否在地图中,防止越界

int checkIn(int x, int y)

{

 if(x >= 0 && x <= 4 && y >= 0 && y <= 8)

  return 1

 return 0

}

//输出最终结果

void output()

{

 int i, j

 for(i = 0 i <= 4 i++)

 {

  for(j = 0 j <= 8 j++)

   printf("%d ",map[i][j])

  putchar('\n')

 }

 printf("共计%d步。", map[0][8])

}

//从x y开始寻找能否到达终点,能返回1,不能返回0,step表示当前的步数。

int findPath(int x, int y, int step)

{

 int i

 map[x][y] = step

 //终点

 if(x == 0 && y == 8)

 {

  output()

  return 1

 }

 //向右边4个方向前进

 for(i = 0 i < 4 i++)

  if(checkIn(x+move[i].x, y+move[i].y))

   if(findPath(x+move[i].x, y+move[i].y, step+1) == 1)

    return 1

 //四个方向均无法到达终点,回溯并返回0

 map[x][y] = 0

 return 0

}

int main(int argc, char ** argv)

{

 memset(map, 0, sizeof(map))

 printf("请输入起点<x,y>\n")

 scanf("%d,%d", &sx, &sy)

 findPath(sx, sy, 1)

 return 0

}

希望能够帮助到你,望采纳!

printf("%c%c",219,219)是输出两个白色竖形格子的,组成一个横着的格子,当然前提是(i+j)%2==0,即图中斜着对角线形状。printf("%c%c",219,219)这句只是输出两个字符,没什么复杂的啊,用ASCII码输出对应字符啊,见下图:

219正好是一个竖形方格

棋盘覆盖问题

问题描述:在一个2k×2k 个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。在棋盘覆盖问题中,要用图示的4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。

代码:#include<stdio.h>

int tile=0//整型变量,记录L型骨牌的数量  int Matrix[100][100]//定义数据结构

void ChessBoard(int tr,int tc,int dr,int dc,int size)

{//tr和tc分别是棋盘左上角方格的行号、列号;dr和dc分别是特殊方格的行号、列号   if(size==1)  return int t=tile++//L型骨牌号,初值为0   int s=size/2//分割棋盘

if(dr<tr+s&&dc<tc+s)//用L型骨牌号覆盖左上角子棋盘  ChessBoard(tr,tc,dr,dc,s)// 特殊方格在此棋盘中  else

{//特殊方格不在此棋盘中用 ,t号L型骨牌覆盖右下角   Matrix[tr+s-1][tc+s-1]=t// 覆盖本子棋盘中的其余方格   ChessBoard(tr,tc,tr+s-1,tc+s-1,s) }

if(dr<tr+s&&dc>=tc+s)//用L型骨牌号覆盖右上角子棋盘  ChessBoard(tr,tc,dr,dc,s)// 特殊方格在此棋盘中  else

{//特殊方格不在此棋盘中用 ,t号L型骨牌覆盖左下角   Matrix[tr+s-1][tc+s]=t// 覆盖本子棋盘中的其余方格   ChessBoard(tr,tc+s,tr+s-1,tc+s,s) }

if(dr>=tr+s&&dc<tc+s)//用L型骨牌号覆盖左下角子棋盘  ChessBoard(tr+s,tc,dr,dc,s)// 特殊方格在此棋盘中  else

{//特殊方格不在此棋盘中用 ,t号L型骨牌覆盖右上角   Matrix[tr+s][tc+s-1]=t// 覆盖本子棋盘中的其余方格   ChessBoard(tr+s,tc,tr+s,tc+s-1,s) }

if(dr>=tr+s&&dc>=tc+s)//用L型骨牌号覆盖右上角子棋盘  ChessBoard(tr+s,tc+s,dr,dc,s)// 特殊方格在此棋盘中  else

{//特殊方格不在此棋盘中用 ,t号L型骨牌覆盖左上角   Matrix[tr+s][tc+s]=t// 覆盖本子棋盘中的其余方格   ChessBoard(tr+s,tc+s,tr+s,tc+s,s) }

}

 int main()  {   int size,r,c,row,col         //memset(Matrix,0,sizeof(Matrix))        for(int i=0i<=100i++)//初始化 为零          {          for(int j=0j<=100j++)          {           Matrix[i][j]=0         }         }          scanf("%d",&size)//输入棋盘大小           scanf("%d%d",&row,&col)//输入特殊方格位置          ChessBoard(0,0,row,col,size)         for (r = 0r <sizer++)//输出棋盘覆盖结果          {              for (c = 0c <sizec++)             {                  printf("%2d ",Matrix[r][c])            }              printf("\n")        }          return 0 }

输出结果: