遞迴,八皇后問題
#include <cstdio>
#include <iostream>
#include <cstdlib>
using namespace std;
int cnt = 0;
int n = 8;
int P[10] = {0};
bool hashTable[10] = {false};
void print()
{
for(int i = 1; i <= n; i++)
printf("%d",P[i]);
printf("\n");
}
// 從第1~第n行,針對每一行放置的位置(即第幾列)
// ,進行全排列,篩選符合條件的組合
void generateP(int index)
{
if(index == n+1)
{
cnt++;
print();
return ;
}
for(int x = 1; x <= n; x++)
{
if(hashTable[x] == false)
{
bool flag = true;
for(int pre = 1; pre < index; pre++)
{
if (abs(index-pre) == abs(x-P[pre]))
{
flag = false;
break;
}
}
if(flag)
{
P[index] = x;
hashTable[x] = true;
generateP(index + 1);
hashTable[x] = false ;
}
}
}
}
int main()
{
generateP(1);
printf("%d",cnt);
return 0;
}
相關推薦
遞迴,八皇后問題
#include <cstdio> #include <iostream> #include <cstdlib> using namespace std; int cnt = 0; int n = 8; int P[10]
遞迴求解八皇后問題
問題描述會下國際象棋的人都很清楚:皇后可以在橫、豎、斜線上不限步數地吃掉其他棋子。如何將 8 個皇后放在棋盤上(有 8 * 8 個方格),使它們誰也不能被吃掉!這就是著名的八皇后問題。 對於某個滿足要求的 8 皇后的擺放方法,定義一個皇后串 a 與之對應, a=b1b2..
C語言回溯法遞迴求解八皇后問題
Problem E 8皇后問題 時限:1000ms 記憶體限制:10000K 總時限:3000ms 描述: 輸出8皇后問題所有結果。 輸入: 沒有輸入。 輸出: 每個結果第一行是No n:的形式,n表示輸出的是第幾個結果;下面8行,每行8個字元,‘A’表示皇后,‘.’
java利用遞迴解決八皇后問題
問題簡介: 要求在一個8*8的棋盤上放置8個皇后,使任意兩個皇后都不同行不同列且不在同一條斜對角線上。採用遞迴和回溯的思想解決這一問題是較為直觀的。一開始,棋盤上的任意格子都可落子,因此可任意選擇第一個皇后的位置。放置了第一個皇后之後,棋盤上的可落子格子的分佈將發生改變,然
python基於右遞迴解決八皇后問題的方法
凡是線性回溯都可以歸結為右遞迴的形式,也即是二叉樹,因此對於只要求一個解的問題,採用右遞迴實現的程式要比回溯法要優美的多。def Test(queen,n): '''這個就不用說了吧,就是檢驗第n(下標,0-7)行皇后的位置是否合理''' q=queen for i in xrange(n): i
八皇后問題(遞迴,回溯)
八皇后問題是一個以國際象棋為背景的問題:如何能夠在 8×8 的國際象棋棋盤上放置八個皇后,使得任何一個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行、縱行或斜線上。八皇后問題可以推廣為更一般的n皇后擺放問題:這時棋盤的大小變為n
8皇后以及N皇后演算法探究,回溯演算法的JAVA實現,非遞迴,迴圈控制及其優化
研究了遞迴方法實現回溯,解決N皇后問題,下面我們來探討一下非遞迴方案 實驗結果令人還是有些失望,原來非遞迴方案的效能並不比遞迴方案效能高 程式碼如下: package com.newflypig.eightqueen; import java.util.Date; /**
8皇后以及N皇后演算法探究,回溯演算法的JAVA實現,非遞迴,資料結構“棧”實現
是使用遞迴方法實現回溯演算法的,在第一次使用二維矩陣的情況下,又做了一次改一維的優化 但是演算法效率仍然差強人意,因為使用遞迴函式的緣故 下面提供另一種回溯演算法的實現,使用資料結構”棧“來模擬,遞迴函式的手工實現,因為我們知道計算機在處理遞迴時的本質就是棧 時間複雜度是一樣的,空間
【qduoj - 夏季學期創新題】矩形剖分(遞迴,dp)
題幹: 描述 對一個給定的矩形,將其劃分成儘可能少的正方形,輸出正方形的最少個數。例如,如下圖所示的情況,則輸入為3和4,輸出為4。 輸入 輸入兩個整數中間用空格分開。 輸出 輸出最少分割成的正方形的個數。 輸入樣
遞迴,迭代和遍歷
遞迴 如果一個函式在內部呼叫自身本身,這個函式就是遞迴函式。 條件:必須要有收斂條件和遞迴公式。 特性:1.必須有一個明確的結束條件。 2.每次進入更深一層遞迴時,問題規模相比賞析遞迴都應有所減少。 3.遞迴效率不高,遞迴層次過多會導致棧溢位(遞迴最大999層)。
二叉樹的建立、遞迴,非遞迴遍歷
#include<bits/stdc++.h> using namespace std; typedef struct ListNode{ struct ListNode *Lchild, *Rchild; string str; ListNode():Lchild
PHP 遞迴,回撥函式
遞迴: //回撥函式 把一個函式的名字以字串形式傳到另一個函式中,按變數函式的使用方法使用這個函式 function jia($num1,$num2){ return $num1 + $num2; } function ha($a){
java斐波那契數列(Fibonacci sequence)的三種方式:遞迴,備忘錄,動態規劃
java斐波那契數列(Fibonacci sequence)的三種方式:遞迴,備忘錄,動態規劃 1.最常使用的是遞迴,就是從上往下尋找答案,然後在返回來。 2.備忘錄也是從上往下,只是去掉了遞迴中重複計算的部分,因為它使用一個容器來裝已經計算出的值,這裡就多一個判斷,如果計算過該式子,就直接
圖的深度優先遍歷(非遞迴+遞迴,詳解)
圖的深度優先遍歷 非遞迴演算法: #include<iostream> #include<stack> using namespace std; const int MaxSize=100; class MGraph{//鄰接矩陣的構建 p
【CodeForces - 266C】Below the Diagonal (遞迴,子問題,貪心模擬)
題幹: You are given a square matrix consisting of n rows and n columns. We assume that the rows are numbered from 1 to
遞迴:N皇后問題
1.問題 在國際象棋中,皇后的移動方式為橫豎交叉的,因此在任意一個皇后所在位置的水平、豎直、以及45度斜線上都不能出現皇后的棋子,例子 2.思路 每個皇后必須放在不同行、不同列上、不同斜線上 3.程式碼 #include <iostream> #include
C# 不用遞迴,獲取無限層級資料
物件屬性 public class ResList { public int ID { get; set; } public List<ResList> Child { get; set; } = null; public int
LeetCode刷題Easy篇斐波那契數列問題(遞迴,尾遞迴,非遞迴和動態規劃解法)
題目 斐波那契數列: f(n)=f(n-1)+f(n-2)(n>2) f(0)=1;f(1)=1; 即有名的兔子繁衍問題 1 1 2 3 5 8 13 21 .... 我的解法 遞迴 public static int Recursion
(D11)Python-函數語言程式設計,遞迴,閉包
函數語言程式設計 函數語言程式設計 函數語言程式設計是指用一系列函式解決問題 函式是一等公民 好處: - 用每個函式完成細小的功能,一系列函式組合可以解決大問題 - 函式僅接收輸入併產生輸出,不包含任何能影像輸出的內部狀態 函式的可重入性:
java使用遞迴,複製資料夾下的所有子檔案
1.先判斷要複製的檔案是資料夾還是檔案,如果是檔案,就進行復制,如果是資料夾,就進行下一層的迴圈,運用遞迴的特性,將所有的檔案進行復制。 2.存在問題,相對來說,使用字元流來進行復制有缺陷,在複製的過程中,對於複製的圖片啊,ppt什麼的檔案會有損害,可能不能開