日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

N皇后(C语言)

發布時間:2023/12/19 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 N皇后(C语言) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

任務描述

本關任務:國際象棋中的皇后可以沿著水平線,垂直線,或者斜線前進,吃掉遇到的所有棋子,如果棋盤上有八個皇后,則這八個皇后如何相安無事的放置在棋盤上,1970年與1971年, E.W.Dijkstra與N.Wirth曾經用這個問題來講解程式設計之技巧。該題要求N皇后的放置結果共有多少種。

相關知識

回溯法

測試說明

平臺會對你編寫的代碼進行測試:
輸入描述:輸入一個正整數N(N小于16)
輸出描述:輸出結果

例 測試輸入:8
預期輸出:92

解析:

放置皇后時,對所有列進行遍歷,并且一一判斷能不能進行放置。可以放置便進行遞歸,一種方法成功后回溯尋找下一種。

//下面編寫代碼 #include <stdio.h> #include <stdlib.h> #define N 16 int q[N]; // 下標為皇后的行號,值為列號 int count = 0; // 統計解得個數// 檢驗第i行的k列上是否可以擺放皇后 int find(int i,int k) {int j=1;while(j<i) // 通過前面已放置皇后的行來判斷這一列是否可以放置{// 第j行的皇后是否在k列或(j,q[j])與(i,k)是否在斜線上if(q[j]==k ||abs(j-i)==abs(q[j]-k))return 0; // 不能放置j++;}return 1; // 可以放置 } // 放置皇后到棋盤上 void place(int k,int n) {int j;if(k>n) // 終止條件count++; // 終止代表一種放法實現,計數加一else{for(j=1;j<=n;j++) // 試探第k行的每一個列{if(find(k,j)){q[k] = j; // 存入皇后存放的行列屬性place(k+1,n); // 遞歸}}} }int main(void) {int n;scanf("%d",&n); place(1,n);printf("%d", count);return 0; }

總結

以上是生活随笔為你收集整理的N皇后(C语言)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。