求N皇后程式(能秒過N 15)。

2025-04-27 16:05:02 字數 2949 閱讀 5309

1樓:匿名使用者

秒過n=15有難度,甚至枯廳我覺得不太現實……(我小弱……)沒培隱。

我能寫的中首最快的程式大概只能秒過n=14……

幫我看看n皇后問題這個程式**出錯了啊

2樓:

看了好久你的程式,終於發現了錯誤。(看別人的程式太惱火了)當最後乙個皇后放在合適的位置時,先進入(flag==1&&j==n)的條件,輸出結果,這時flag==1,繼續最後乙個皇后尋找位置,找不到。進入(flag==0&&a[j]==n),前乙個皇后尋找位置。

但當最後乙個皇后放在右下角的位置時,先輸出結果,這時flag還是==1,但已經找到最後乙個位置,無法將flag=0,所以無法進入(flag==0&&a[j]==n),所以再繼續尋找就出錯了。只要在後面加上"if(a[j] =n) flag=0"就行。

下面是用你的程式改的:

#include

#include

int k=0,a[20],j=1,flag,n,c=0;//k為解的個數,n為皇后的個數,flag標記有沒有放置皇后。

void lycqueen()/兩個皇后在同一行或者同一對角線上,衝突。

else flag=1;//沒衝突,放置乙個皇后//for

沒試探完,繼續試探。

if(flag==1&&j==n)//遞迴呼叫if(flag==0&&a[j]==n)//回溯,退回去重新試探//for

lycqueen

void main(){

int i;

printf("請輸入皇后的個數:")

scanf("%d",&n);/輸入皇后的個數nj=1; for(i=1;i<=n;i++)a[j]=i;

j=j+1;

lycqueen();呼叫lycqueen函式if(c==1) j=1;

forprintf("解的個數為%d個",k);

main我只測試了乙個8,結果是對的哈,有問題再說。

3樓:網友

除錯的時候報什麼錯啊。

4樓:網友

今天看了一下午,還是沒找出錯誤。

身心俱疲啊。

只是發現,當最後乙個皇后放在最下面的時候(就是右下角那個位置),就會出錯。而且將錯n-1次。

再慢慢看下。

n皇后問題

5樓:來根黃瓜不切片

輸出結果沒有做什麼處理。

直接列印的。

以前寫過列印圖形的,懶得搞了。

#include

#include

bool place(int x,int k) //考察皇后k放置在x[k]列是否發生衝突。

else if (x[k]<=n &&k>n;

int *x=new int[n];

x[0]=0;

queue(n,x);

return 0;}

n皇后問題到底是什麼問題??

6樓:網友

**於西洋棋中的皇后,通常叫8皇后問題,即在乙個n×n的棋盤上擺放n個皇后,使其中任意兩個皇后都不同列、同行和在一條斜線上。

在資料結構中這是乙個經典的例子,使用棧和遞迴可以求解,請參考《資料結構》,清華大學出版社,嚴蔚敏等編寫。

7樓:網友

n皇后問題。

問題描述:**於西洋棋中的皇后,通常叫8皇后問題,即在n*n的棋盤上,放置n個皇后,要求每一橫行,每一列,每一對角線上均只能放置乙個皇后,求可能的方案及方案數。

解決方案:program n_queens;

const n=8;

vara:array[1..n] of integer;

mk:array[1..n] of boolean;

total:integer;

procedure output;

var i:integer;

begininc(total);

write('no.':4,'[',total:2,']');

for i:=1 to n do write(a[i]:3);

writeln;

end;function can(d:integer):boolean;

var i:integer;

begincan:=false;

if mk[a[d]] then exit;

for i:=1 to d-1 do

if abs(a[i]-a[d])=abs(i-d) then exit;

can:=true;

end;procedure dfs(d:integer);

var i,j:integer;

beginif (d>n) then

beginoutput;

exit;end;

for i:=1 to n do

begina[d]:=i;

if can(d) then

beginmk[i]:=true;

dfs(d+1);

mk[i]:=false;

end;end;

end;begin

fillchar(mk,sizeof(mk),0);

dfs(1);

writeln('total = ',total);

end.

n皇后問題 c++

8樓:

回溯演算法的典型例子嘛。你會用回溯演算法,這個題目基本是解決了。

誰能給我解釋一下什麼是n-皇后?

9樓:網友

假設有一n×n的棋盤和n個皇后,請為這n個皇后進行佈局使得這n個皇后互不攻擊(即任意兩個皇后不在同一行,同一列,同一對角線)求各種可能的情況。

輸入數字n,求123n的和寫程式

等於 n 1 乘於二分之一的n include using namespace std int main cout dim s,s1 s 1,s1 0 input n for k 1 to n for j 1 to n s s j next j s1 s1 s next k msgbox s1 用c...

求乙個24秒微控制器c語言程式 5

求乙個秒微控制器c語言程式 include define uchar unsigned charuchar times,sec tisr interrupt th tl times if times times sec main tmod x th tl tr et ea sec times whil...

急求有誰知道泰國人妖皇后POY拍過的電影或者連續劇麼

是有那麼個電視劇,但我忘了叫什麼名字。回頭再幫你看看吧!話說回來,這小丫頭 丫頭?第一次看到她 她?的時候還弄得我心跳加速了好幾下。因為我會泰文,我能給你幾個連結,這裡的 是一般你從知道的回答裡找不到滴。這裡還有泰國其他漂漂妹妹。記得采納啊 泰國人妖皇后poy演出過什麼電影或者是電視劇 愛你每一天 ...