程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu 2553 N皇後問題 經典搜索,DFS解法

hdu 2553 N皇後問題 經典搜索,DFS解法

編輯:C++入門知識

hdu 2553 N皇後問題 經典搜索,DFS解法


N皇後問題

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 10239 Accepted Submission(s): 4609



Problem Description 在N*N的方格棋盤放置了N個皇後,使得它們不相互攻擊(即任意2個皇後不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。
你的任務是,對於給定的N,求出有多少種合法的放置方法。


Input 共有若干行,每行一個正整數N≤10,表示棋盤和皇後的數量;如果N=0,表示結束。
Output 共有若干行,每行一個正整數,表示對應輸入行的皇後的不同放置數量。
Sample Input
1
8
5
0

Sample Output
1
92
10

Author cgf
代碼說明一切 代碼:
#include 
#define MAX 15
int n , ans = 0 ,res[MAX],map[MAX];

void DFS(int row)
{
	if(row == n)
	{
		ans++ ;
		return ;
	}
	for(int i = 0 ; i < n ; ++i)
	{
		bool flag = false ;
		map[row] = i ;
		for(int j = 0 ; j < row ; ++j)
		{
			if(map[row]==map[j]||map[row]-row==map[j]-j||map[row]+row==map[j]+j)
			{
				flag = true ;
				break ;
			}
		}
		if(!flag)
		{
			DFS(row+1) ;
		}
	}
}

int main()
{
	for(int i = 1 ; i <= 10 ; ++i)
	{
		n = i ;
		ans = 0 ;
		DFS(0) ;
		res[i] = ans ;
	}
	while(~scanf(%d,&n) && n)
	{
		printf(%d
,res[n]) ;
	}
	return 0 ;
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved