java数据结构-递归算法之八皇后问题两种方法

第一种,好理解

import java.util.Arrays;


public class Queen8 {
//  public static int num=0;
//  public static int MaxQueen=8;
//  public static int[] cols=new int[MaxQueen];
//  
//  public Queen8()
//  {
//      getArrangement(0);
//      System.out.println("共有"+num+"种摆放方法");
//  }
//  
//  public void getArrangement(int n)
//  {
//      boolean []rows=new boolean[MaxQueen];
//      for(int i=0;i<n;i++)//由前面n-1列的数据   找出第n列所有不合法的行
//      {
//          rows[cols[i]]=true;
//          int d=n-i;
//          if(cols[i]-d>=0)
//              rows[cols[i]-d]=true;
//          if(cols[i]+d<=MaxQueen-1)
//              rows[cols[i]+d]=true;
//          
//      }
//      
//      for(int i=0;i<MaxQueen;i++)
//      {
//          if(rows[i])
//              continue;
//          cols[n]=i;
//          if(n<MaxQueen-1)
//          {
//              getArrangement(n+1);
//          }
//          else
//          {
//              num++;
//              printChessBoard();
//          }
//      }
//  }
//  public void printChessBoard()
//  {
//      for(int i=0;i<MaxQueen;i++)
//      {
//          for(int j=0;j<MaxQueen;j++)
//          {
//              if(i==cols[j])
//              {
//                  System.out.print("0 ");
//              }
//              else
//                  System.out.print("+ ");
//          }
//          System.out.println();
//          
//      }
//      System.out.println("\n");
//  }
//  
//  public static void main(String[] args)
//  {
//      Queen8 q=new Queen8();
//  }


    public static final int maxsize=8;
    public int []row=new int[maxsize];
    public int num=0;

    public Queen8()
    {
        getArrangement(0);
        System.out.println("实现八皇后共有"+num+"个方法");
    }

    public void getArrangement(int n)
    {
        boolean []col=new boolean[8];
        Arrays.fill(col, true);//很重要
        for(int i=0;i<n;i++)
        {
            col[row[i]]=false;
            int x=n-i;
            if(row[i]-x>=0)
                col[row[i]-x]=false;
            if(row[i]+x<maxsize)
                col[row[i]+x]=false;


        }
        for(int i=0;i<maxsize;i++)
        {
            if(!col[i])
            {
                continue;
            }

            row[n]=i;
            if(n<maxsize-1)
            {
                getArrangement(n+1);    
            }

            else
            {
                num++;
                printChessBoard();
            }

        }
    }
    public void printChessBoard()
    {
        for(int i=0;i<maxsize;i++)
        {
            for(int j=0;j<maxsize;j++)
            {
                if(j==row[i])
                {
                    System.out.print("0 ");
                }
                else
                    System.out.print("+ ");
            }
            System.out.println();

        }
        System.out.println("\n");
    }

    public static void main(String[] args)
    {
        Queen8 q=new Queen8();
    }

 }

第二种

import java.util.Arrays;


public class Queen8Erwei {
    public static int[][] arr=new int[8][8];
    public int map=0;


    public boolean rule(int[][] arr,int i, int j)
    {
        if(i==0)
            return true;

        for(int k=0;k<i;k++)
        {
            if(arr[k][j]==1)
                return false;
        }

        for(int m=i-1,n=j-1;m>=0&&n>=0;m--,n--)
        {
            if(arr[m][n]==1)
                return false;
        }
        for(int m=i-1,n=j+1;m>=0&&n<8;m--,n++)
        {
            if(arr[m][n]==1)
                return false;
        }


        return true;
    }
    public void find(int i)
    {
        if(i>7)
        {
            map++;
            print();
            return;
        }
        for(int j=0;j<8;j++)
        {

            if(rule(arr,i,j))
            {
                arr[i][j]=1;
                find(i+1);  
            }
            arr[i][j]=0;
        }
    }
    public void print()
    {
        for(int i=0;i<8;i++)
        {
            for(int j=0;j<8;j++)
            {
                if(arr[i][j]==1)
                    System.out.print("0 ");
                else
                    System.out.print("+ ");
            }
            System.out.println();
        }
        System.out.println("\n");
    }
    public static void main(String[] args)
    {
        Queen8Erwei q8=new Queen8Erwei();

        q8.find(0);
        System.out.println("哈哈"+q8.map);
    }
}

猜你喜欢

转载自blog.csdn.net/m0_37942202/article/details/82078197
今日推荐