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

📄 12-4.c

📁 数据结构经典算法一书源代码和习题解答实现代码。
💻 C
字号:
#include "stdio.h"
#define Board_Max 100
int Board[Board_Max][Board_Max];
int tile=0;
void SetBoard(int tr, int tc, int dr, int dc, int size)
{// 覆盖残缺棋盘
	int t,s;
	if (size ==1) return;
		t = tile++, // 所使用的三格板的数目
	s = size/2; // 象限大小
	//覆盖左上象限
	if(dr<tr+s&&dc<tc+s)
	// 残缺方格位于本象限
		SetBoard(tr,tc,dr,dc,s);
	else {// 本象限中没有残缺方格,把三格板t 放在右下角
		Board[tr + s - 1][tc + s - 1] = t;
		// 覆盖其余部分
		SetBoard(tr,tc,tr+s-1,tc+s-1,s);
	}
	//覆盖右上象限
	if(dr < tr + s && dc >= tc + s)
		// 残缺方格位于本象限
		SetBoard(tr,tc+s,dr,dc,s);
	else {// 本象限中没有残缺方格
		// 把三格板t 放在左下角
		Board[tr + s - 1][tc + s] = t;
		// 覆盖其余部分
		SetBoard(tr,tc+s,tr+s-1,tc+s,s);
	}
	//覆盖左下象限
	if (dr >= tr + s && dc < tc + s)
	// 残缺方格位于本象限
		SetBoard(tr+s, tc, dr, dc, s);
	else {// 把三格板t 放在右上角
		Board[tr + s][tc + s - 1] = t;
		// 覆盖其余部分
		SetBoard(tr+s, tc, tr+s, tc+s-1, s);
	}
	// 覆盖右下象限
	if (dr >= tr + s && dc >= tc + s)
	// 残缺方格位于本象限
		SetBoard(tr+s, tc+s, dr, dc, s);
	else {// 把三格板t 放在左上角
		Board[tr+s][tc+s] = t;
		// 覆盖其余部分
		SetBoard(tr+s, tc+s, tr+s, tc+s, s);
	}
}
void PrintBoard(int size)
{
	int i,j;
	for (i = 0; i < size; i++) {
		for (j = 0; j < size; j++)
			printf("%5d",Board[i][j]);
		printf("\n");
	}
}
void main()
{
	int tr,tc,dr,dc,size;
	//初始化
	SetBoard(tr,tc,dr,dc,size);
	PrintBoard(size);
}

⌨️ 快捷键说明

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