1. 程式人生 > >演算法設計與分析--N皇后問題實現程…

演算法設計與分析--N皇后問題實現程…

#include

#include

#include

#include

#include

//定義常量

const int MAXSIZE=100;

//第一全域性變數

int queen_count=0; //記錄皇后的個數

int solut_count=0; //記錄求解個數

int queen_position[MAXSIZE]; //記錄皇后在各列上的位置

//輸出所求解圖形

void output()

{

int row,col,n;

cout<<" "<<++solut_count<<" 種解法:";

for(row=0; row

cout<<" "<<queen_position[row];

cout<<"\n\n\t\t圖示如下: "<<endl;

for(row=0; row

{

for(col=0; col

{

n = queen_position[col];

if(row==n-1)

cout<<""<<" ";

else

cout<<""<<" ";

}

cout<<endl;

}

cout<<"\n\t\t請按任意鍵繼續。。。"<<endl;

getch();

system("cls");

}

//判斷當前皇后所放位置正確與否

bool judge_queen(int n)

{

for(int i=0; i

{

if(queen_position[i]==queen_position[n])

return false; //同列返回false

if(fabs(queen_position[n]-queen_position[i])==fabs(n-i)) //fabs()

return false; //同一對角線上返回false

}

return true;

}

//遞迴求解n皇后問題

void queen(int n) //n表示放置第n個皇后

{

int row;

if(n==queen_count)

{

output();

return;

}

for(row=1; row<=queen_count;row++) //

核心程式碼部分

{

queen_position[n]=row; //試探第n行皇后的正確位置

if(judge_queen(n))

queen(n+1);

}

}

////////////////////////////////////////////////////////////////

int main() //主函式入口

{

cout<<"請輸入皇后的個數: ";

cin>>queen_count;

queen(0); //0開始試探

cout<<queen_count<<"皇后問題解法共有: "<<solut_count<<endl;

cout<<"\n\n\t\t請按任意鍵繼續。。。"<<endl;

system("pause");

return 0;

}

相關推薦

演算法設計分析--N皇后問題實現

#include #include #include #include #include //定義常量 const int MAXSIZE=100; //第一全域性變數 int q

演算法設計分析P8演算法實現第一題

#include<stdio.h> #include<string.h> int main() { int n, t, i,temp; int count[10]; mem

計算機演算法設計分析課本(王曉東著)課後演算法實現題1-3 最多約數問題

問題描述: 正整數x的約數是能整除x的正整數。正整數x的約數個數記為div(x)。例如,1 2 5 10都是10的約數,且div(10)=4。設a和b是2個正整數,a<=b,找出a和b之間約數個數最多的數x。 演算法設計: 對於給定的2個正整數a<=b,計算a和b之間約數個數最多

演算法設計分析--求最大子段和問題(蠻力法、分治法、動態規劃法) C++實現

演算法設計與分析--求最大子段和問題 問題描述: 給定由n個整陣列成的序列(a1,a2, …,an),求該序列形如 的子段和的最大值,當所有整數均為負整數時,其最大子段和為0。 利用蠻力法求解: int maxSum(int a[],int n) { int ma

演算法設計分析: 5-37 n²-1謎問題

5-37 n²-1謎問題 問題描述 重排九宮是一個古老的單人智力遊戲。據說重排九宮起源於我國古時由三國演義故事“關羽義釋曹操”而設計的智力玩具“華容道”,後來流傳到歐洲,將人物變成數字。原始 的重排九宮問題是這樣的:將數字 1~8 按照任意次序排在 3×

演算法設計分析——動態規劃(一)矩陣連乘

動態規劃——Dynamic programming,可以說是本人一直沒有啃下的骨頭,這次我就得好好來學學Dynamic programming. OK,出發! 動態規劃通常是分治演算法的一種特殊情況,它一般用於最優化問題,如果這些問題能夠: 1.能夠分解為規模更小的子問題 2.遞迴的

演算法設計分析——分治法

前言 本文重點回顧了卜老師課堂上關於分治演算法的一些常見的問題。加油吧!ヾ(◍°∇°◍)ノ゙ 分治法(Divide and Conquer) 當面對一個問題的時候,我們可能一下子找不到解決問題的方法。此時,我們可以考慮將問題規模最小化,先看看當問題規模變小以後,我們如何去解決

演算法設計分析04-排序問題

①氣泡排序:量量比較待排序資料元素的大小,發現兩個資料元素的次序相反時進行交換,直到沒有反序的資料元素為止。時間複雜度是O(n*2)。穩定的。下面給出兩種排序演算法,我比較喜歡第二種,因為第二種才能真正解釋冒泡的原理 public class bubble1 {    &n

演算法設計分析03-十進位制轉二進位制問題

10進位制數轉2 進位制數 題目:2 進位制除了 0,1,還可以用 2 表示。例如: 1-> 1 2-> 10 or 02 3->11 4 ->100 or 020 or 012 問題:這樣一個十進位制數轉為二進位制數,就不是唯一的了。現求十進位制數 N 轉換為這種二進位制數

演算法設計分析02-走臺階問題

走臺階問題,一次可以走1,2,3級,都 N級臺階的方法數 。 初始:f(0) = 0; f(1) =1; f(2) = 1 + 1 = 2; 遞推公式:f(n) = f(n - 1) + f(n-2) + f(n - 3) 解題思路: 因為一次可以走1,2,3級,所以在第

演算法設計分析01-連結串列的逆置

一.最常用的方法: LNode*  ReverseList(LNode* head) {     if (head == NULL)         return NULL;  &nbs

演算法設計分析05-最近點對演算法

1.題目描述: 設S是平面上n個點的集合,在這一節中,我們考慮在S中找到一個點對p和q的問題,使其相互距離最短。換句話說,希望在S中找到具有這樣性質的兩點p1 = (x1,y1)和p2 = (x2,y2),使它們間的距離在所有S中點對間為最小 2.解題思路 一共分為三種情況 情況1:

演算法設計分析課程的時間空間複雜度

演算法設計與分析課程的時間空間複雜度: 總結 演算法 時間複雜度 空間複雜度 說明 Hanoi $ O(2^n) $ $ O(n) $ 遞迴使用 會場安排問題 \(O

【計算機演算法設計分析】——SVM

一.簡介 支援向量機(support vector machines)是一種二分類模型,它的目的是尋找一個超平面來對樣本進行分割,分割的原則是間隔最大化,最終轉化為一個凸二次規劃問題來求解。由簡至繁的模型包括: (1)當訓練樣本線性可分時,通過硬間隔最大化,學習一個線性可分支援向量機;(2)當訓練樣本近似

演算法設計分析作業題】第十一週:20. Valid Parentheses

題目 C++ solution class Solution { public: bool isValid(string s) { stack<char> cstack; for (int i = 0; i < s.si

演算法設計分析》第十一週作業

《演算法設計與分析》第十一週作業 標籤(空格分隔): 課堂作業 文章目錄 《演算法設計與分析》第十一週作業 @[toc] 題目概要 思路 具體實現 心得 原始碼:

演算法設計分析》第十二週作業

《演算法設計與分析》第十二週作業 標籤(空格分隔): 課堂作業 文章目錄 《演算法設計與分析》第十二週作業 @[toc] 題目概要 思路 具體實現 心得 原始碼:

演算法設計分析》第十週作業

《演算法設計與分析》第十週作業 標籤(空格分隔): 課堂作業 文章目錄 《演算法設計與分析》第十週作業 @[toc] 題目概要 思路 具體實現 心得 原始碼:

演算法設計分析》第九周作業

《演算法設計與分析》第九周作業 標籤(空格分隔): 課堂作業 文章目錄 《演算法設計與分析》第九周作業 @[toc] 題目概要 思路 具體實現 心得 原始碼:

演算法設計分析》第八週作業

《演算法設計與分析》第八週作業 標籤(空格分隔): 課堂作業 文章目錄 《演算法設計與分析》第八週作業 @[toc] 題目概要 思路 具體實現 心得 原始碼: