八皇后问题

第一种

#include <stdio.h>
#include <math.h>
static	int chess[8][8] = {0}; 
static	int mac = 1;
int a,b,c,d,e,f,g,h,count;
bool isvalid(int j ,int k)   //j 行, k列 
{
	for (int i = 0; i < j; i++)   //0 到  j-1行 
	{
		if (1 == chess[i][k]) 	//判断与chess[0][a]在同列
		{
			return false;
		}
		if (0 == i)		//判断与chess[0][a]在同一斜列 
		{
			if(j == abs(k-a))
			{
				return false; 
			}			
		} 
		if (1 == i)		//判断与chess[1][b]在同一斜列 
		{
			if((j-1) == abs(k-b))
			{
				return false; 
			}			
		} 
		if (2 == i)		//判断与chess[2][c]在同一斜列 
		{
			if((j-2) == abs(k-c))
			{
				return false; 
			}			
		} 
		if (3 == i)		//判断与chess[3][d]在同一斜列 
		{
			if((j-3) == abs(k-d))
			{
				return false; 
			}			
		} 
		if (4 == i)		//判断与chess[4][e]在同一斜列 
		{
			if((j-4) == abs(k-e))
			{
				return false; 
			}			
		} 
		if (5 == i)		//判断与chess[5][f]在同一斜列 
		{		
			if((j-5) == abs(k-f))
			{
				return false; 
			}			
		} 
		if (6 == i)		//判断与chess[5][f]在同一斜列 
		{
			if((j-6) == abs(k-g))
			{
				return false; 
			}	
		}
	}
	return true;
}
			

				
void func()
{     
	for (a = 0; a < 8; a++)			//第一行 第a列 
	{						
		chess[0][a] = 1; 
		for (b = 0; b < 8; b++)			//第二行 
		{
			if (isvalid(1, b))
			{	
				chess[1][b] = 1;
				for (c = 0; c < 8; c++)			//第三行 
				{
					if (isvalid(2, c))
					{
						chess[2][c] = 1;
						for(d = 0;d < 8; d++)		 //第四行 
						{
							if (isvalid(3, d))
							{
								chess[3][d] = 1;
								for(e = 0; e < 8; e++)   	//第五行 
								{
									if(isvalid(4, e)) 
									{
										chess[4][e] = 1;
										for (f = 0; f < 8; f++)			//第六行 
										{
											if(isvalid(5, f))
											{
												chess[5][f] = 1;
												for(g = 0; g < 8; g++)		//第七行 
												{
													if(isvalid(6, g))
													{
														chess[6][g] = 1;
														for(h = 0; h < 8;h++)
														{
															if(isvalid(7,h))
															{
																chess[7][h] = 1;
																for(int i = 0; i < 8; i++)
																{
																	printf("%d,%d,%d,%d,%d,%d,%d,%d\n",chess[i][0],chess[i][1],chess[i][2],chess[i][3],chess[i][4],chess[i][5],chess[i][6],chess[i][7]);
																}	
																printf("*******************************\n");
																count++;
																chess[7][h] = 0;												
															}	
														}
														chess[6][g] = 0;
													}
												}
												chess[5][f] = 0;
											}  
										}
										chess[4][e] = 0;
									}
								}
								chess[3][d] = 0;
							}
						}
						chess[2][c] = 0;
					}    
				}	
				chess[1][b] = 0;
			} 
		} 
		chess[0][a] = 0;										
	}
}

int main()
{
	count = 0;
	func();	
	printf("%d",count);
	return 0;
}         

以上是我第一次写的代码,可以运行,但是写的不好,没有使用递归

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值