数据结构--递归与分治

汉诺塔分析:

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

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;
}
相关推荐
故事和你914 小时前
sdut-程序设计基础Ⅰ-实验五一维数组(8-13)
开发语言·数据结构·c++·算法·蓝桥杯·图论·类和对象
像污秽一样4 小时前
算法与设计与分析-习题4.2
算法·排序算法·深度优先·dfs·bfs
Storynone5 小时前
【Day20】LeetCode:39. 组合总和,40. 组合总和II,131. 分割回文串
python·算法·leetcode
明明如月学长5 小时前
AI 更新太快学不过来?我用OpenClaw打造专属AI学习工作流
算法
黎阳之光6 小时前
【黎阳之光:以无线专网与视频孪生,赋能智慧广电与数字中国】
算法·安全·智慧城市·数字孪生
刀法如飞7 小时前
Agentic AI时代,程序员必备的算法思想指南
人工智能·算法·agent
刀法如飞7 小时前
Agentic AI时代程序员必备算法思想详解(附实战案例)
算法·ai编程·编程开发·agentic
飞Link7 小时前
告别盲目找Bug:深度解析 TSTD 异常检测中的预测模型(Python 实战版)
开发语言·python·算法·bug
记忆多8 小时前
c++名字空间 函数模版 左右值
开发语言·c++·算法
三伏5228 小时前
控制理论前置知识——相平面数学基础2(示例部分)
算法·平面·控制