zoukankan      html  css  js  c++  java
  • n皇后问题

    问题描述(转换为矩阵形式):

    n行n列的矩阵,每一行,每一列,没有斜线,只能有一个1,对应情况有多少种?

    1.回溯法

    用三个map分别记录每一列,没一正斜线和每一反斜线中是否有1  columnMap[int]byte,flag1Map[int]byte,flag2Map[int]byte

    由于矩阵为n*n所以 在同一正斜线上的坐标满足 i+j=c(c为定值) 在同一反斜线上的坐标满足i-j=m(m为定值)

    所以 columnMap的key为列数j

            正斜线flag1Map的key为 i+j

       反斜线flag2Map的key为i-j

    func totalNQueens(n int) int {
        columnMap:=map[int]byte{}
        diag1Map:=map[int]byte{}
        diag2Map:=map[int]byte{}
        return dfs(0,0,n,columnMap,diag1Map,diag2Map)
    }
    
    func dfs(row,count,n int,columnMap,diag1Map,diag2Map map[int]byte)int{
        for col:=0;col<n;col++{
            if _,ok:=columnMap[col];ok{
                continue
            }
           
            if _,ok:=diag1Map[row-col];ok{
                continue
            }
           
            if _,ok:=diag2Map[row+col];ok{
                continue
            }
           
            
            if row==n-1{
                count++
            }else{
                 columnMap[col]=0
                 diag1Map[row-col]=0
                 diag2Map[row+col]=0
                count=dfs(row+1,count,n,columnMap,diag1Map,diag2Map)
                delete(columnMap,col)
                delete(diag1Map,row-col)
                delete(diag2Map,row+col)
            }
        }
        return count
    }
  • 相关阅读:
    ${}和#{}的区别,使用场景
    Mysql 面试高频题:innodb,myisam(待更)
    Python 基础
    Python 基础
    python之input(), raw_input()
    Python之回调魔法
    python之setattr,getattr,hasattr
    python之类私有成员
    python之函数式编程
    python之类定义
  • 原文地址:https://www.cnblogs.com/fwdqxl/p/8279305.html
Copyright © 2011-2022 走看看