动态规划--八皇后

做了好多动态规划的题目,有了一些心得。

	public int getanswer(char[][] map,int index,int n) {
		if(index==n) {// index==n  则意味的递归结束
			/*System.out.println("-------------");
			for(int i=0;i<n;i++) {
				System.out.println(map[i]);
			}//打印一些 可行的排列
			System.out.println("--------------");*/
			return -1;//返回-1 意味着递归的结束,或 递归失败
		}else {
			for(int i=0;i<n;i++) {//遍历该次 皇后可行的位置
				if(isOk(i, index, map)) {
					map[index][i]='Q';
					if(getanswer(map, index+1, n)==-1) {//递归返回1  说明该位置符合
						map[index][i]='\0';
					}
				}
			}
			return -1;//递归失败,返回上一级
		}
	}
	public boolean isOk(int x,int y,char[][] map) {//判断某个点 是否可以安放
		int len=map.length;
		for(int i=y-1,j=1;i>=0;i--) {
			if(map[i][x]!='\0')return false;
			if(x-j>=0&&map[i][x-j]!='\0')return false;
			if(x+j<len&&map[i][x+j]!='\0')return false;
			j++;
		}
		return true;
	}

总的来说,八皇后问题就是在不断的递归求解中,尝试可能的情况,假如下一级递归失败,则尝试一下一种情况

posted @ 2019-09-23 21:47  你还未发现  阅读(584)  评论(0编辑  收藏  举报