n-皇后問(wèn)題

      網(wǎng)友投稿 986 2025-03-31

      n?皇后問(wèn)題是指將 n 個(gè)皇后放在 n×n的國(guó)際象棋棋盤(pán)上,使得皇后不能相互攻擊到,即任意兩個(gè)皇后都不能處于同一行、同一列或同一斜線上。

      現(xiàn)在給定整數(shù) n,請(qǐng)你輸出所有的滿足條件的棋子擺法。

      輸入格式

      共一行,包含整數(shù) n。

      輸出格式

      每個(gè)解決方案占 n行,每行輸出一個(gè)長(zhǎng)度為 n的字符串,用來(lái)表示完整的棋盤(pán)狀態(tài)。

      其中 . 表示某一個(gè)位置的方格狀態(tài)為空,Q 表示某一個(gè)位置的方格上擺著皇后。

      每個(gè)方案輸出完成后,輸出一個(gè)空行。

      注意:行末不能有多余空格。

      輸出方案的順序任意,只要不重復(fù)且沒(méi)有遺漏即可。

      數(shù)據(jù)范圍

      1≤n≤9

      輸入樣例:

      4

      輸出樣例:

      .Q..

      ...Q

      Q...

      ..Q.

      ..Q.

      Q...

      ...Q

      .Q..

      思路一:

      米字攻擊法+回溯 dfs+剪枝

      u是列數(shù),一列一列擺棋子。

      #include

      using namespace std;

      const int N = 20;

      int n;

      char g[N][N];

      bool col[N], dg[N], udg[N];

      void dfs(int u)

      {

      if (u == n)

      {

      for (int i = 0; i < n; i ++ ) puts(g[i]);

      puts("");

      return;

      }

      for (int i = 0; i < n; i ++ )

      if (!col[i] && !dg[u + i] && !udg[n - u + i])

      {

      g[u][i] = 'Q';

      col[i] = dg[u + i] = udg[n - u + i] = true;

      dfs(u + 1);

      col[i] = dg[u + i] = udg[n - u + i] = false;

      g[u][i] = '.';

      }

      }

      int main()

      {

      cin >> n;

      for (int i = 0; i < n; i ++ )

      for (int j = 0; j < n; j ++ )

      n-皇后問(wèn)題

      g[i][j] = '.';

      dfs(0);

      return 0;

      }

      方法二:

      一種更加樸素的搜索順序,直接挨個(gè)挨個(gè)兩種情況討論即可,仍舊是從上往下一直擺,出了錯(cuò)誤就回溯。

      #include

      using namespace std;

      const int N = 10;

      int n;

      bool row[N], col[N], dg[N * 2], udg[N * 2];

      char g[N][N];

      void dfs(int x, int y, int s)

      {

      if (s > n) return;

      if (y == n) y = 0, x ++ ;

      if (x == n)

      {

      if (s == n)

      {

      for (int i = 0; i < n; i ++ ) puts(g[i]);

      puts("");

      }

      return;

      }

      g[x][y] = '.';

      dfs(x, y + 1, s);

      if (!row[x] && !col[y] && !dg[x + y] && !udg[x - y + n])

      {

      row[x] = col[y] = dg[x + y] = udg[x - y + n] = true;

      g[x][y] = 'Q';

      dfs(x, y + 1, s + 1);

      g[x][y] = '.';

      row[x] = col[y] = dg[x + y] = udg[x - y + n] = false;

      }

      }

      int main()

      {

      cin >> n;

      dfs(0, 0, 0);

      return 0;

      }

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:提問(wèn)的智慧
      下一篇:excel功能(excel功能區(qū)隱藏了如何顯示)
      相關(guān)文章
      亚洲欧洲一区二区三区| 亚洲美女又黄又爽在线观看| 亚洲一区二区三区播放在线| 亚洲国产精品一区二区久久hs| 亚洲欧美在线x视频| 亚洲国产精品久久网午夜| 97亚洲熟妇自偷自拍另类图片| 亚洲国产精品一区二区久久| 亚洲国产精品一区第二页| 亚洲精品无码成人片久久| 亚洲精品国产精品乱码不卞| 亚洲男人第一无码aⅴ网站| 久久精品国产亚洲AV不卡| 亚洲免费日韩无码系列| 亚洲国产中文v高清在线观看| 亚洲?V无码乱码国产精品| 精品亚洲成A人在线观看青青| 国产成人综合亚洲| 亚洲天堂中文字幕在线| 久久精品国产精品亚洲人人| 日本亚洲国产一区二区三区| 亚洲开心婷婷中文字幕| 亚洲国产成人久久精品影视| 久久精品蜜芽亚洲国产AV| 国产亚洲成归v人片在线观看| 亚洲午夜久久久久久久久久| 亚洲成AV人片在线观看无| 亚洲国产精品嫩草影院久久| 处破女第一次亚洲18分钟| 亚洲综合伊人久久综合| 亚洲国产精品成人精品无码区在线| 亚洲av福利无码无一区二区| 日木av无码专区亚洲av毛片| 亚洲天堂电影在线观看| 亚洲色成人网站WWW永久四虎| 在线精品自拍亚洲第一区| 相泽亚洲一区中文字幕| 久久亚洲精品中文字幕无码 | 国产AV无码专区亚洲AV麻豆丫 | 亚洲视频一区二区在线观看| 亚洲午夜成激人情在线影院|