数据结构--递归与分治

汉诺塔分析:

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

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;
}
相关推荐
luj_17683 小时前
残熵算法实时化三大瓶颈突破
c语言·开发语言·网络·经验分享·算法
mCell4 小时前
你以为短链接只是 Hash + 301/302?
后端·算法·架构
码少女5 小时前
数据结构——哈希表的基础
数据结构·散列表
KaMeidebaby5 小时前
卡梅德生物技术快报|抗体亲和力成熟工业化调控新机制:差异性浆细胞增殖工艺优化思路
java·开发语言·人工智能·算法·机器学习·架构·spark
luj_17686 小时前
心形曲线轨迹控制三大关键技术
c语言·开发语言·c++·经验分享·算法
tmlx3I0816 小时前
高光谱拼接算法(六)RANSAC 误匹配剔除
人工智能·算法·机器学习
不相心 -w-7 小时前
基础-滑动窗口-(定长 | 不定长)
算法
醉城夜风~7 小时前
Java详解经典算法题:接雨水(三种实现方案+原理剖析)
java·开发语言·算法
ysa0510307 小时前
【板子】ST表
c++·笔记·算法·板子
CHHH_HHH8 小时前
【C++11】深入解析C++可变参数模板
开发语言·c++·算法·stl·c++11