登录
  • #刷题

【学JAVA中】问一下八皇后问题,是在看不懂了

TonyJang
1202
4
import java.io.BufferedReader;[br][/br][br][/br]import java.io.InputStreamReader;
这两啥意思啊?百度搜的根本就不知所云,google上不了......大牛能清晰易懂的讲讲吗?

完整代码:
import java.io.BufferedReader;[br][/br][br][/br]import java.io.InputStreamReader;[br][/br][br][/br]public class Queen[br][/br][br][/br]{[br][/br][br][/br]     static int x;//皇后数目[br][/br][br][/br]     int p=0;//成功摆放x个皇后的方法数[br][/br][br][/br]     int[] m=new int[x];//用来存储棋子的行位置,m[i]=i表示第i行[br][/br][br][/br]     int[] n=new int[x];//用来存储棋子的列位置,n[i]=i表示第i列[br][/br][br][/br]     public Queen()[br][/br][br][/br]     {[br][/br][br][/br]         setQueen(0);//调用皇后摆放函数摆放第一个皇后[br][/br][br][/br]         if(p==0)//假如当前设置的皇后数目没有摆放方法[br][/br][br][/br]         {[br][/br][br][/br]             System.out.println("此皇后数目没有成功摆放方法!");[br][/br][br][/br]         }[br][/br][br][/br]     }[br][/br][br][/br]     public void setQueen(int i)//摆放皇后位置函数,i表示当前摆放的皇后是第i+1个皇后[br][/br][br][/br]     {[br][/br][br][/br]         for (m[i]=i,n[i]=0;n[i]<x;n[i]++)[br][/br][br][/br]         {[br][/br][br][/br]             if(i>0)[br][/br][br][/br]             {[br][/br][br][/br]                 if (testQueen(i))//调用测试函数测试当前皇后的试探位置是否满足条件[br][/br][br][/br]                    {[br][/br][br][/br]                     if(i==(x-1))//当第X个皇后满足条件时,输出这X个皇后[br][/br][br][/br]                     {[br][/br][br][/br]                         p++;[br][/br][br][/br]                         for (int j=0;j<x;j++)[br][/br][br][/br]                            {[br][/br][br][/br]                             for (int c=0;c<n[j];c++)[br][/br][br][/br]                             {[br][/br][br][/br]                                    System.out.print("○ ");// ○ :表示棋盘上不是皇后的棋子[br][/br][br][/br]                             }[br][/br][br][/br]                             [br][/br][br][/br]                             System.out.print("● ");// ●:表示棋盘上的皇后[br][/br][br][/br]                          for (int d=0;d<(x-1-n[j]);d++)[br][/br][br][/br]                             {[br][/br][br][/br]                                    System.out.print("○ ");[br][/br][br][/br]                             }[br][/br][br][/br]                             System.out.println();[br][/br][br][/br]                         }[br][/br][br][/br]                         System.out.println("目前成功摆放方法数是:"+p);[br][/br][br][/br]                         continue;[br][/br][br][/br]                     }[br][/br][br][/br]                     setQueen(i+1);//递归调用[br][/br][br][/br]                   }[br][/br][br][/br]                    else [br][/br][br][/br]                    {[br][/br][br][/br]                      continue;[br][/br][br][/br]                  }    [br][/br][br][/br]             }[br][/br][br][/br]             else[br][/br][br][/br]             {[br][/br][br][/br]                 setQueen(i+1);//递归调用[br][/br][br][/br]             }        [br][/br][br][/br]         }[br][/br][br][/br]     }[br][/br][br][/br]        public boolean testQueen(int a)//测试当前皇后是否满足条件   [br][/br][br][/br]     {[br][/br][br][/br]         for (int i=0;i<a;i++)[br][/br][br][/br]         {[br][/br][br][/br]             if (n[i]==n[a]||Math.abs(m[i]-m[a])==Math.abs(n[i]-n[a]))//与当前皇后之前的所有皇后的列数相同或者行差绝对值等于列差绝对值时则不满足条件[br][/br][br][/br]             {[br][/br][br][/br]                 return false;[br][/br][br][/br]             }[br][/br][br][/br]         }[br][/br][br][/br]         return true;[br][/br][br][/br]     }[br][/br][br][/br]        public static void main(String[] args) throws Exception [br][br][/br]     {[br][/br][br][/br]            System.out.print("输入皇后数目:");[br][/br][br][/br]            BufferedReader bfr=new BufferedReader(new InputStreamReader(System.in));//输入皇后个数X[br][/br][br][/br]        [br][/br][br][/br]            x=Integer.parseInt(bfr.readLine());[br][/br][br][/br]         new Queen();[br][/br][br][/br]     }[br][/br][br][/br]}[br][/br][br][/br]求看懂的大牛能录一段解说详细说说每行的意思吗,LZ转CS的已经研究了8小时,是在愚钝在看下去是在浪费时间了[/i][/i][/i][/i][/i][/i][/i][/i][/i]
4条回复
热度排序

发表回复