栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

八皇后问题【C语言版】【新手详解】

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

八皇后问题【C语言版】【新手详解】

#include
#include
#include
int queen[8]= {0};//皇后在某一列的行号 
int count = 0;//统计有几种放法 
void show();//用于显示皇后在8*8的位置 

//判断当前行、列能否放置皇后,此函数会在放置皇后函数eightqueen中使用到 
int check(int currentrow,int currentcolumn){
	int column;
	for(column = 0;column < currentcolumn;column++){//从column=0列开始判断前面列是否与当前列有冲突 
		int row = queen[column];//column列皇后的行位置为row 
		if(row == currentrow){//当前行有皇后,即column列皇后的行位置 
			return false;
		}
		int rowdiff = abs(currentrow - row);//计算行差  
		int columndiff = abs(currentcolumn - column);//计算列差 
		if(rowdiff == columndiff){//前面列有皇后在斜线上 
			return false;
		}
	}
	return true;//当前位置与前面列的皇后无冲突,可以放皇后 
}
//
void eightqueen(int currentcolumn){//放置8个皇后 
	int row;
	for(row = 0;row < 8;row++){//尝试在当前列的每一行放置皇后 
		if(check(row,currentcolumn)){
			queen[currentcolumn] = row;//在当前列的row行放皇后
			if(currentcolumn != 7) {
				eightqueen(currentcolumn + 1);//放下一列的皇后 
			}else{
				count++;//当correntcolumn等于7时8个皇后均放完了,完成一轮放置 
				show();
				//为了看queen[8]的数值数据 
				
			} 
		}
	}
}
//显示皇后的布局位置 
void show(){
	int row,column;
	printf("第%d种n",count);
	for(row = 0;row < 8;row++){
		for( column = 0; column < 8;column++){
			if(queen[column] == row){// 皇后每一列的行位置 
			printf("M");
		    }
		    else{
		    	printf("-");
			}
		
	}
	printf("n");
}	
}
int main(){
	eightqueen(0);
	printf("总共%d种n",count);
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/942836.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号