N Queen(代碼、分析、匯編)

目錄:

    • 代碼:
    • 分析:
    • 匯編:

代碼:

main.c

#include <stdio.h>/*
程序描述:輸出N*N中符合左右對角線與上下左右方向都沒被使用的位置在每一行的所有情況使用檢測左上角,正上角,右上角 三個方向有沒有被使用來判斷該行該位置是否可以使用當檢測行大于N時,表示完成一種情況,按下回車鍵。從大于N行的這次find函數調用出棧。返回調用(使用大于N行的參數調用了find函數的)處。就是N行調用find函數的地方執行將N行原本選用好的位置重置,再找下一個。如果找到就重復上面大于N行的find函數調用如果沒找到,將調用N行的find函數出棧,返回到N-1行調用find函數的地方,在N-1行查找找到就再調用回N行,找不到就再出棧,返回上一行也就是調用處。總結:在本行找到就調用到下一行查找,本行找不到就返回到上一行查找,找到就再返回到下一行,找不到就再返回到上一行,實現將所有情況輸出*/
#define N 5typedef struct _tag_Pos
{int ios;int jos;
} Pos;static char board[N+2][N+2];//定義二維數組,加2用于上下左右四邊
static Pos pos[] = { {-1, -1}, {-1, 0}, {-1, 1} }; //定義用于向左上角,正上角,右上角的位置遞增的數組
static int count = 0;void init()//初始化數組函數
{int i = 0;int j = 0;for(i=0; i<N+2; i++)//將二維數組的四邊賦上'#'{board[0][i] = '#';  //上board[N+1][i] = '#'; //下board[i][0] = '#'; //左board[i][N+1] = '#'; //右}for(i=1; i<=N; i++)//將內部內容賦上空格{for(j=1; j<=N; j++){board[i][j] = ' ';}}
}void display()//將整個二維數組輸出顯示函數
{int i = 0;int j = 1;for(i=0; i<N+2; i++){for(j=0; j<N+2; j++){printf("%c", board[i][j]);}printf("\n");}
}int check(int i, int j)//檢測該位置是否符合要求
{int ret = 1;int p = 0;for(p=0; p<3; p++){int ni = i;int nj = j;while( ret && (board[ni][nj] != '#') )//判斷這個位置不是在四邊{ni = ni + pos[p].ios;nj = nj + pos[p].jos;//如果該位置的左上角方向有被使用了,不再進行的正上角與右上角的檢測//因為ret 為0了,如果第一個左上角位置沒有被使用。將一直位移比較//直至遇到'#'四邊ret = ret && (board[ni][nj] != '*');//判斷這個位置沒被使用}}return ret;
}void find(int i)//查找位置函數(主要函數)
{int j = 0;if( i > N ){count++;printf("Solution: %d\n", count);display();getchar();}else{for(j=1; j<=N; j++){if( check(i, j) ){board[i][j] = '*';find(i+1);//函數執行完出棧時將這個位置重置,相當在這一行重新找下一個符合要求的位置//在這一行找不到時,調用的這行的函數出棧。返回到上一行調用的這個位置//又將上一行的原來的使用的位置重置,找下一個符合要求的位置,如果找不到//就再返回上一行重設尋找,如果找到,就再調用自身從新到下一行找,//依此類推board[i][j] = ' ';}}}
}int main()
{init();find(1);return 0;
}

分析:

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

匯編:

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/379190.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379190.shtml
英文地址,請注明出處:http://en.pswp.cn/news/379190.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

kotlin 計算平方_Kotlin程序計算自然數之和

kotlin 計算平方Given a number number, and we have to calculate the sum of all natural numbers from 1 to number. 鑒于一些數字 &#xff0c;我們必須從1計算所有自然數的總和數量 。 Example: 例&#xff1a; Input:number 15Output:120用于計算Kotlin中自然數之和的…

Python-身份證核對

中華人民共和國居民身份證號碼由17 位數字和1位校驗碼組成。其中&#xff0c;前6位為所在地編號&#xff0c;第7~14 位為出生年月日&#xff0c;第15~17位為登記流水號&#xff0c;其中第17位偶數為女性&#xff0c;奇數為男性。校驗碼的生成規則如下: 將前面的身份證號碼17位數…

VC 加載套接字庫

//加載套接字庫 WORD wVersionRequested;//套接字庫版本信息 WSADATA wsaData; int err; wVersionRequested MAKEWORD(1,1); err WSAStartup(wVersionRequested,&wsaData); if(err ! 0){ //加載失敗 return; } if(LOBYTE(wsaData.wVersion) ! 1 || //判斷是不是所請求的…

統計各種字符個數

#include <stdio.h> #include <conio.h>int main(int argc, char * argv[]) {char ch;int letters 0, space 0, digit 0, others 0;printf("請輸入一組字符串:\n");while((chgetchar())!\n){if(ch>a && ch < z || ch >A &&…

樹存儲結構(代碼、分析、匯編)

目錄&#xff1a;代碼&#xff1a;分析&#xff1a;匯編&#xff1a;代碼&#xff1a; LinkList.h LinkList.c 線性表 GTree.h #ifndef _GTREE_H_ #define _GTREE_H_typedef void GTree;//定義樹類型 typedef void GTreeData;//定義節點中存放數據的類型 typedef void (GTre…

Python-《twinkle twinkle little star》統計單詞出現次數

統計英文兒歌《twinkle twinkle little star》中&#xff0c;使用到的單詞及其出現次數。要求去除單詞大小寫的影響&#xff0c;不統計標點符號的個數&#xff0c;并按降序輸出。 Twinkle, twinkle, little star, How I wonder what you are! Up above the world so high, Like…

二元矩陣峰值搜索_好斗的牛(二元搜索)

二元矩陣峰值搜索A farmer has built a long barn with N stalls. The stalls are placed in a straight manner at positions from x1, x2, ...xN. But his cows (C) are aggressive and don’t want to be near other cows. To prevent cows from hurting each other, he wan…

WinForm Paenl里面添加Form

Form7 f7 new Form7();f7.TopLevel false;f7.Parent this.panel1;this.panel1.Controls.Add(f7);f7.Show();轉載于:https://www.cnblogs.com/Haibocai/archive/2012/10/30/2746003.html

跳躍表SkipList

跳躍表(Skip List)是一種隨機化數據結構&#xff0c;基于并聯的鏈表&#xff0c;其效率可比擬于二叉查找樹(對于大多數操作需要O(log n)平均時間)。 基本上&#xff0c;跳躍列表是對有序的鏈表增加上附加的前進鏈接&#xff0c;增加是以隨機化的方式進行的&#xff0c;所以在列…

Python---冒泡排序、選擇排序

冒泡排序 依次輸入n個數&#xff0c;進行冒泡排序 冒泡排序法&#xff0c;即兩個相鄰的進行比較&#xff0c;比較之后換位置 def bubbleSort(arr):n len(arr)for i in range(n):for j in range(0, n-i-1):if arr[j] > arr[j1] :arr[j], arr[j1] arr[j1], arr[j]arr[] n…

react js 添加樣式_如何在React JS Application中添加圖像?

react js 添加樣式Hello! In this article, we will learn how to add images in React JS? I remember when I just started coding in React JS, I thought adding images would be done exactly as it is in HTML. I later realized that it was different. 你好&#xff0…

二叉樹(多路平衡搜索樹)-(代碼、分析、匯編)

目錄&#xff1a;代碼&#xff1a;分析&#xff1a;匯編&#xff1a;代碼&#xff1a; BTree.h #ifndef _BTREE_H_ #define _BTREE_H_#define BT_LEFT 0 //定義左子節點標識 #define BT_RIGHT 1 //定義右子節點標識typedef void BTree;//定義樹類型 typedef unsigned long lo…

window service服務安裝錯誤

今天按照園子里面的文章&#xff0c;弄了一個系統服務&#xff0c;可是一直裝不上去&#xff0c; 正在運行事務處理安裝。 正在開始安裝的“安裝”階段。查看日志文件的內容以獲得 D:\TecCreateSvc\TecJsCreateService.exe 程序集的進度。該文件位于 D:\TecCreateSvc\TecJsCre…

DM9000調試記錄

最近在調試DM9000&#xff0c;遇到了很多問題&#xff0c;在網上幾乎也能找到同樣的問題&#xff0c;但是答案千變萬化&#xff0c;弄的我這樣不行&#xff0c;那樣也不行。 1、遇到的第一個問題&#xff0c;網卡不識別&#xff0c;出現的調試信息就是&#xff1a; dm9000 dm90…

Python---二分法查找

輸入n個數&#xff0c;通過二分法查找該數的下標 def binarySearch(arr,value):m 0#開始n len(arr#最后)while m<n:mid(mn)//2#計算中間位置if valuearr[mid]:#查找成功&#xff0c;返回元素對應的位置return midelif value>arr[mid]:#在后面一半元素中繼續查找mmid1e…

Python datetime isocalendar()方法與示例

Python datetime.isocalendar()方法 (Python datetime.isocalendar() Method) datetime.isocalendar() method is used to manipulate objects of datetime class of module datetime. datetime.isocalendar()方法用于操作模塊datetime的datetime類的對象。 It uses a dateti…

ASP.NET 技術(附翻譯)

1.構建 ASP.NET 頁面ASP.NET 和ASP.NET結構ASP.NET 是微軟.NET framework整體的一部分, 它包含一組大量的編程用的類&#xff0c;滿足各種編程需要。 在下列的二個部分中, 你如何學會 ASP.NET 很適合的放在.NET framework, 和學會能在你的 ASP.NET 頁面中使用語言。.NET類庫假想…

SQL捕獲異常

原文地址 http://technet.microsoft.com/zh-cn/office/ms179296%28vsql.100%29在 Transact-SQL 中使用 TRY...CATCHTransact-SQL 代碼中的錯誤可使用 TRY…CATCH 構造處理&#xff0c;此功能類似于 Microsoft Visual C 和 Microsoft Visual C# 語言的異常處理功能。TRY…CATCH …

二叉樹遍歷(代碼,分析,匯編)

目錄&#xff1a;代碼&#xff1a;分析&#xff1a;匯編&#xff1a;代碼&#xff1a; BTree.h BTree.c 二叉樹&#xff08;多路平衡搜索樹&#xff09; LinkQueue.h #ifndef _LINKQUEUE_H_ #define _LINKQUEUE_H_typedef void LinkQueue;//定義隊列類型LinkQueue* LinkQueu…

Java Vector insertElementAt()方法與示例

矢量類insertElementAt()方法 (Vector Class insertElementAt() method) insertElementAt() method is available in java.util package. insertElementAt()方法在java.util包中可用。 insertElementAt() method is used to set the given element (ele) at the given (indices…