當前位置:編程學習大全網 - 編程語言 - 論C語言的八皇後

論C語言的八皇後

當我第壹次看到很多for的時候,我就知道妳根本不會用遞歸,這讓妳的程序越來越復雜。以下是別人博客的代碼。請仔細研究。

/*

*?NQueen.cpp

*

*已創建?開:?2013 65438+2月23日

*作者:?橙黃

*/

//形參rowCurrent表示當前到達的行數。

# include & ltiostream & gt

# include & ltfstream & gt

# include & ltiomanip & gt

# include & ltstdlib.h & gt

使用?命名空間?std

布爾?Check(int?rowCurrent,int?* & ampn queen);?//判斷功能

作廢?打印(ofstream?& ampos,int?n,int?* & ampn queen);//打印功能

作廢?求解(int?rowCurrent,int?* & ampNQueen,int?n,int?& amp數數,?ofstream?& ampOS);?//N皇後問題處理函數,index的初始值壹般為0。

//判斷函數,如果水平或垂直方向或對角線上有沖突,則返回FALSE。

布爾?Check(int?rowCurrent,int?* & ampNQueen)

{

int?我?=?0;

而(我?& lt?行電流)

{

if(NQueen[i]?==?NQueen[rowCurrent]?||?(ABS(n queen[I]-n queen[row current])?==?abs(i-rowCurrent))?)

{

回歸?假的;

}

i++;

}

回歸?真實;

}

//將所有可能的結果輸出到文本文檔。

作廢?打印(ofstream?& ampos,int?n,int?* & ampNQueen)

{

os & lt& lt”壹個呼叫\ n”;

為了什麽?(int?我?=?0;我?& lt?n;i++)?{

for(int?j?=?0?;?j?& lt?n;?j++)

{

os & lt& lt(NQueen[i]==j?1:0);

os & lt& ltsetw(2);

}

os & lt& lt”\ n”;

}

os & lt& lt”\ n”;

}

//核心函數。遞歸求解N皇後問題,打到底就打印。

作廢?求解(int?rowCurrent,int?* & ampNQueen,int?n,int?& amp數數,?ofstream?& ampos)

{

if(rowCurrent?==?N)//當前行數觸底,即完成壹個矩陣,輸出。

{

Print(os,n,n queen);

count++;

}

for(int?我?=?0;我?& lt?n;?i++)

{

NQueen[rowCurrent]?=?我;?//第I行第I列,試試看。

if(Check(rowCurrent,NQueen))

{

Solve(rowCurrent+1,NQueen,n,count,OS);//移動到下壹行

}

}

}

int?主()

{

int?n;?//問題的規模

int?數數?=?0;?//解決方案計數

cout & lt& lt"請輸入問題的規模n "

CIN & gt;& gtn;

如果(n & lt4)

{

cerr & lt& lt“問題等級必須大於4”< & lt;endl

回歸?0;

}

int?*NQueen?=?新的?int[n];

ofstream?OS;

OS . open(" result . txt ");

Solve(0,NQueen,n,count,OS);

cout & lt& lt“問題的解決辦法已經有了”

OS . close();

回歸?0;

}

  • 上一篇:C++問題, 4. 下列程序執行完後,x的值是多少?
  • 下一篇:Java工程師的發展前景?
  • copyright 2024編程學習大全網