#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 }
输出结果: