亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

遞歸實現n(經典的8皇后問題)皇后的問題

2019-11-14 15:14:24
字體:
來源:轉載
供稿:網友

  問題描述:八皇后問題是一個以國際象棋為背景的問題:如何能夠在8×8的國際象棋棋盤上放置八個皇后, 使得任何一個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處于同一條橫行、縱行或斜線上,此問題進而可以推廣為n皇后的問題。

  解題思路:n*n的矩陣,遞歸每一個點,當皇后數量達到n的時候,進行判斷,若滿足題目條件,則答案加一(number++),否則繼續進行遍歷。

  保存皇后點的方法:構造一個二維數組reserve[][],當reserve[i][j] == 1時候,則該點已經有皇后,若reserve[i][j]==0則,皇后可以存在于該點,且該點置為一。

  判斷皇后數量的方法,定義一個int sign ,當sign<8的時候遞歸遍歷,并且重復上一操作,否則對reserve數組進行判斷,判斷此數組內等于1的點的坐標,是否滿足題意,判斷完之后,當前點置為0.

  判斷x,y軸只需要判斷是否有相等的坐標值即可。

  判斷斜線,則判斷每兩個點之間坐標值相減的絕對值是否相等,(這里需要遞歸遍歷每一個點)若相等,則點在斜線上重復,返回false,若不相等,則點在斜線上不重復,返回true。

  先定義全局變量:

PRivate static int number = 0;  //表示答案數量	int count = 0;   //下文的數組下標	static String[] str ;  //保存正確答案的字符串數組,為了去除重復

   定義主函數:

public static void main(String[] args) {		com c = new com();		System.out.print("請輸入皇后數字n:");		Scanner s = new Scanner(System.in);		int n = Integer.parseInt(s.nextLine());		int[][] reserve = new int[n][n]; //儲存皇后的狀態		str = new String[n*100];		int sign = 1;		c.startRun(reserve, n ,sign); 		System.out.println(number);	}

   下面執行遍歷操作的函數:

public void startRun(int[][] reserve , int n ,int sign){		for(int i = 0;i < n;i++){			for(int j = 0;j < n;j++){				if(reserve[i][j] == 0)					reserve[i][j] = 1;  //該點為一個皇后				else{					continue;				}				if(sign == n){					if(checkAllQuean(reserve,n)){  //對n皇后進行位置判斷						output(reserve,n);  //一個輸出函數,輸出n皇后的點						System.out.println();						number++;					}				}else if(sign < n){						startRun(reserve , n ,sign + 1); //進行遍歷操作					}				reserve[i][j] = 0;			}		}	}

   下面對數組reserve進行皇后位置判斷:

/*
     * 檢查兩個皇后是否在同一行,同一列,或者同一斜線上
     * 存在返回false
     * 不存在返回true
     */
public boolean checkAllQuean(int[][] reserve , int n){ int[] x = new int[n]; int x1 = 0; int[] y = new int[n]; int y1 = 0; for(int i = 0;i < n;i++){ for(int j = 0;j < n;j++){ if(reserve[i][j] == 1){ x[x1++] = i; y[y1++] = j; } } }// 獲得所有皇后的點坐標 for(x1 = 0;x1 < n;x1++){ for(y1 = 0;y1 < n;y1++){ if(x1 == y1) continue; if(!checkTwoQuean(x[x1],y[x1],x[y1],y[y1])){ //比較每一次n皇后的點點點點坐標 return false; } } } if(!checkReNumber(x,y,n)){ return false; } return true; }

   刪除重復答案的函數:

/*	 * 將確定的解答數組,保存在一個String[]里面,用來避免重復	 * 若重復則返回false	 * 不重復則返回true	 */	public boolean checkReNumber(int[] x,int [] y , int n){		String test = null ;		for(int j = 0; j < n;j++){			test += x[j]+""+y[j]+"";		}		for(String st : str){			if(st == null)				continue;			if(st.equals(test)){				return false;			}		}		str[count++] = test;		return true;	}

   下面進行對兩個皇后位置的判斷:

/*	 * 檢查兩個皇后是否在同一行,同一列,或者同一斜線上	 * 存在返回false	 * 不存在返回true	 */	public boolean checkTwoQuean(int i , int j , int m ,int n){		if(i == m)			return false;		else if(j == n)			return false;		else if(Math.abs((m - i)) == Math.abs((n - j)))				return false;		else{			return true;		}	}

   下面是輸出reserve點的函數:

public void output(int[][] reserve , int n){		for(int k = 0; k < n;k++){			for(int h = 0;h< n;h++){				if(reserve[k][h] == 0)					continue;				System.out.print(k+","+h+" ");			}		}	}

   完,但是效率極低,非常低。

輸出案例:

請輸入皇后數字n:40,1 1,3 2,0 3,2 0,2 1,0 2,3 3,1 2

   n皇后問題在大于等于4的時候有解


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
午夜精品久久久久久久99热浪潮| 欧美精品18videos性欧美| 国产精品草莓在线免费观看| 亚洲一区亚洲二区亚洲三区| 欧美日韩亚洲视频一区| 成人精品久久av网站| 欧美亚洲另类制服自拍| 欧美裸体xxxx极品少妇| 亚洲精品成a人在线观看| 亚洲欧美三级在线| 国产极品jizzhd欧美| 欧美在线亚洲一区| 欧美激情高清视频| 色七七影院综合| 亚洲欧美激情四射在线日| 欧美俄罗斯乱妇| 欧美午夜视频一区二区| 亚洲高清久久久久久| 国产精品视频xxxx| 国产一区二区激情| 91欧美精品午夜性色福利在线| 九九热这里只有精品免费看| 国产日韩欧美在线播放| 亚洲日韩欧美视频一区| 国产日韩在线观看av| 国产精品电影久久久久电影网| 激情久久av一区av二区av三区| 日韩高清av在线| 欧美精品电影免费在线观看| 久久夜色精品国产亚洲aⅴ| 日本19禁啪啪免费观看www| 永久免费看mv网站入口亚洲| 中文字幕精品国产| 国产精品视频内| 国产精品高潮呻吟久久av黑人| 日韩欧美在线中文字幕| 激情懂色av一区av二区av| 尤物九九久久国产精品的分类| 欧美疯狂性受xxxxx另类| 亚洲人在线视频| 欧美日韩亚洲视频| 精品高清一区二区三区| 91成人在线播放| 岛国av一区二区| 欧美伊久线香蕉线新在线| 欧美日韩ab片| 一区二区三区视频免费在线观看| 国产欧美日韩91| 国产精品视频xxx| 成人午夜两性视频| 亚洲第一偷拍网| 高潮白浆女日韩av免费看| 国产伦精品免费视频| 亚洲精品久久久久中文字幕二区| 国产精品男女猛烈高潮激情| 久久av红桃一区二区小说| 亚洲高清av在线| 亚洲免费视频观看| 久久精品视频在线观看| 久久亚洲私人国产精品va| www.xxxx精品| 亚洲国产欧美日韩精品| 亚洲第一精品福利| 欧美床上激情在线观看| 性金发美女69hd大尺寸| 欧美高清电影在线看| 日韩**中文字幕毛片| 久久国产精品影片| 日韩欧美亚洲一二三区| 色香阁99久久精品久久久| 欧美日韩黄色大片| 91九色精品视频| 亚洲一区二区久久久久久| 国产精品第100页| 高跟丝袜欧美一区| 国产91九色视频| 国产亚洲精品日韩| 欧美激情视频网站| 成人高清视频观看www| 亚洲色图18p| 91网站在线看| 黄色精品一区二区| 亚洲免费伊人电影在线观看av| 国产精品一区二区久久国产| 欧美一级成年大片在线观看| 亚洲wwwav| 日韩av在线最新| 亚洲天堂成人在线| 韩国三级电影久久久久久| 136fldh精品导航福利| 最近2019年中文视频免费在线观看| 国产精品视频播放| 久久久久99精品久久久久| 国产精品v日韩精品| 91精品国产91久久久久久久久| 国产成人精品在线播放| 亚洲人成电影网站色| 91精品一区二区| 精品国产视频在线| 中文字幕国产亚洲2019| 91高潮精品免费porn| 人九九综合九九宗合| 51精品国产黑色丝袜高跟鞋| 国产精品久久久久7777婷婷| 久久91精品国产91久久跳| 奇门遁甲1982国语版免费观看高清| 高清亚洲成在人网站天堂| 欧美激情一区二区三区久久久| 日本精品视频在线| 日韩av123| 91精品国产色综合久久不卡98口| 亚洲在线视频福利| 国模叶桐国产精品一区| 亚洲天堂av女优| 欧美交受高潮1| 日韩在线观看免费| 亚洲欧美www| 亚洲第一页在线| 国产亚洲美女久久| 亚洲一区国产精品| 美女性感视频久久久| 日韩欧美福利视频| yw.139尤物在线精品视频| 亚洲欧美视频在线| 国产精品高潮呻吟久久av黑人| 精品久久久久久久久久久久| 日韩欧美aⅴ综合网站发布| 2018日韩中文字幕| 亚洲精品视频在线播放| 亚洲欧洲av一区二区| 伊人亚洲福利一区二区三区| 91欧美视频网站| 欧美国产视频日韩| 一区二区欧美日韩视频| 亚洲视屏在线播放| 欧美成人精品h版在线观看| 欧美亚洲视频在线观看| 亚洲aaaaaa| 4444欧美成人kkkk| 亚洲女人天堂视频| 亚洲免费成人av电影| 自拍偷拍亚洲一区| 精品久久久一区二区| 97在线视频国产| 欧美性xxxx极品hd满灌| 亚洲成avwww人| 亚洲xxxx妇黄裸体| 亚洲欧美制服丝袜| 亚洲一区第一页| 久久久国产成人精品| 日韩在线中文字| 亚洲国产成人久久综合| 欧美成人免费播放| 色婷婷成人综合| 国产日韩一区在线| 欧美电影院免费观看| 日本人成精品视频在线| 久久国内精品一国内精品| 欧美有码在线观看视频| 欧美成人久久久| 国产日韩精品一区二区| 欧美日本高清视频| 国产91av在线| 国产999精品|