数据结构--递归与分治

汉诺塔分析:

以三层进行分析,大于三层分析情况是一样的。

cpp 复制代码
#include <stdio.h>

void move(int n,char x,char y,char z)
{
	if(1 == n)
	{
		printf("%c---------->%c\n",x,z);
	}
	else
	{
		move(n-1,x,z,y);//将第n-1个盘子从x借助z移动到y 
		printf("%c---------->%c\n",x,z);
		move(n-1,y,x,z);//将n-1个盘子从y借助x移动到z上 
	}
}

int main()
{
	int n;
	printf("Input n:");
	scanf("%d",&n);
	printf("移动的步骤\n");
	move(n,'x','y','z'); 
	return 0;
 } 

八皇后问题:

cpp 复制代码
#include <stdio.h>

int count = 0; 

int notDanger(int row ,int j,int (*chess)[8])
{
	int i,k;
	int flag1;
	//判断列方向 
	for(int i=0;i<8;i++)
	{
		if(*(*(chess+i)+j) != 0)
		{
			flag1 = 1;
			break;
		} 
	}
	//判断左上方
	for(i = row, k =j;i>=0&&k>=0;i--,k--)
	{
		if(*(*(chess+i)+k)!=0)
		{
			flag1=1;
			break;
		}
	 } 
	//判断右下方
	for( i = row, k =j;i<8&&k<8;i++,k++)
	{
		if(*(*(chess+i)+k)!=0)
		{
			flag1=1;
			break;
		}
	 } 
	//判断右上方
	for( i = row, k =j;i>=0&&k<8;i--,k++)
	{
		if(*(*(chess+i)+k)!=0)
		{
			flag1=1;
			break;
		}
	 } 
	//判断左下方
	for( i = row, k =j;i<8&&k>=0;i++,k--)
	{
		if(*(*(chess+i)+k)!=0)
		{
			flag1=1;
			break;
		}
	 } 
	if(flag1==1)
	{
		return 0;
	}
	else return 1;
}
// row:起始行  n:列数 chess[8]: 表示棋盘每一行指着 
void EightQueen(int row, int n, int (*chess)[8])
{
	int chess2[8][8];
	int i,j;
	for( i=0;i<8;i++)
	{
		for( j=0;j<8;j++)
			chess2[i][j]=chess[i][j];
	}
	if(8 == row)
	{
		printf("第 %d 种方法:\n",count+1);
		for(i=0;i<8;i++)
		{
			for( j=0;j<8;j++)
				printf("%d  ",*(*(chess2+i)+j));
			printf("\n");
		}
		printf("\n");
		count++;
	}
	else
	{
		//判断这个位置是否有危险
		//如果没有危险,继续往下
		for(j=0;j<n;j++)
		{
			if(notDanger(row,j,chess))//判断是否危险 (不危险) 
			{
				for(i=0;i<8;i++)
				{
					*(*(chess+row)+i) = 0;
				}
				*(*(chess2+row)+j) = 1;
				EightQueen(row+1,n,chess2);
			}
	    } 
	}
}

int main()
{
	int chess[8][8];
	int i,j;
	for(i=0;i<8;i++)
	{
		for(j=0;j<8;j++)
			chess[i][j]=0;
	}
	
	EightQueen(0,8,chess);
	printf("总共有 %d   种解决方法",count);
	return 0;
}
相关推荐
我爱C编程9 分钟前
基于拓扑结构检测的LDPC稀疏校验矩阵高阶环检测算法matlab仿真
算法·matlab·矩阵·ldpc·环检测
算法_小学生14 分钟前
LeetCode 75. 颜色分类(荷兰国旗问题)
算法·leetcode·职场和发展
运器12317 分钟前
【一起来学AI大模型】算法核心:数组/哈希表/树/排序/动态规划(LeetCode精练)
开发语言·人工智能·python·算法·ai·散列表·ai编程
算法_小学生17 分钟前
LeetCode 287. 寻找重复数(不修改数组 + O(1) 空间)
数据结构·算法·leetcode
岁忧18 分钟前
(LeetCode 每日一题) 1865. 找出和为指定值的下标对 (哈希表)
java·c++·算法·leetcode·go·散列表
alphaTao18 分钟前
LeetCode 每日一题 2025/6/30-2025/7/6
算法·leetcode·职场和发展
ゞ 正在缓冲99%…18 分钟前
leetcode67.二进制求和
算法·leetcode·位运算
YuTaoShao21 分钟前
【LeetCode 热题 100】240. 搜索二维矩阵 II——排除法
java·算法·leetcode
写个博客1 小时前
暑假算法日记第二天
算法
ChaITSimpleLove1 小时前
.NET9 实现排序算法(MergeSortTest 和 QuickSortTest)性能测试
算法·排序算法·.net·benchmarkdotnet·datadog.trace