经典N皇后问题 Java版本源代码(可运行)
2012-06-27 15:18
302 查看
public class MainFrame {
final static int N = 16;
static int list[][] = new int
;
int step[] = new int
;
public void Print()
{
for(int i=0; i<N; i++)
{
for(int j=0; j<N; j++)
System.out.print(list[i][j]+" ");
System.out.println();
}
}
public void NQuene()
{
for(int i=0; i<N; i++)
{
int j=0;
while(j<N)
{
if ( ValidateLocate(i,j,list) )
{
list[i][j] = 1;
step[i] = j;
break;
}
j++;
if( j==N )
{
i--;
j=step[i]+1;
for(int k=0; k<N; k++)
list[i][k]=0;
if(j==N)
{
i--;
j=step[i]+1;
for(int k=0; k<N; k++)
list[i][k]=0;
}
}
}
}
}
public static boolean ValidateLocate(int i, int j, int[][] l)
{
for(int m=0; m<N; m++)
{
if( list[m][j] == 1 )
return false;
}
for(int m=0; m<N; m++)
for(int n=0; n<N; n++)
{
if(list[m]
==1)
{
if(Math.abs(i-m) == Math.abs(j-n))
return false;
}
}
return true;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
MainFrame mf = new MainFrame();
mf.NQuene();
mf.Print();
}
}
默认N=16,打印结果如下所示:
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
final static int N = 16;
static int list[][] = new int
;
int step[] = new int
;
public void Print()
{
for(int i=0; i<N; i++)
{
for(int j=0; j<N; j++)
System.out.print(list[i][j]+" ");
System.out.println();
}
}
public void NQuene()
{
for(int i=0; i<N; i++)
{
int j=0;
while(j<N)
{
if ( ValidateLocate(i,j,list) )
{
list[i][j] = 1;
step[i] = j;
break;
}
j++;
if( j==N )
{
i--;
j=step[i]+1;
for(int k=0; k<N; k++)
list[i][k]=0;
if(j==N)
{
i--;
j=step[i]+1;
for(int k=0; k<N; k++)
list[i][k]=0;
}
}
}
}
}
public static boolean ValidateLocate(int i, int j, int[][] l)
{
for(int m=0; m<N; m++)
{
if( list[m][j] == 1 )
return false;
}
for(int m=0; m<N; m++)
for(int n=0; n<N; n++)
{
if(list[m]
==1)
{
if(Math.abs(i-m) == Math.abs(j-n))
return false;
}
}
return true;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
MainFrame mf = new MainFrame();
mf.NQuene();
mf.Print();
}
}
默认N=16,打印结果如下所示:
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
相关文章推荐
- java程序的编译和运行依赖jdk版本问题
- IEDA Java项目,编译运行,提示“Error:java: 无效的源版本: 1.8”问题
- Java类加载顺序问题实例——程序运行后感觉是之前版本
- Android 源代码中JAVA 版本问题
- 经典8皇后问题求解,C#2.0版本
- 第二天,第二道经典面试题 Java版本,可运行
- 递归分治算法之N皇后问题(Java版本)
- 八皇后问题 JAVA程序代码以及运行结果
- 问题版本关于运行错误:java.lang.UnsupportedClassVersionError: Bad version number in .class file
- 回溯算法经典应用之—N皇后问题 (Java)
- Eclipse中运行Java程序出现乱码问题
- 经典回溯问题----n皇后
- Eclipse下好使,但是cmd下执行java运行class文件提示Exception in thread "main" java.lang.NoClassDefFoundError问题
- j2ee的web项目中,java class path的jdk版本 、Eclipse编译器版本、tomcat运行的jdk版本,三者要保持一致
- 关于命令行中javac 编译成功,用 java 运行 class 文件出现 “ 找不到或无法加载主类 ” 的问题
- 解决在VS2005中“当前不会命中断点。源代码与原始版本不同”的问题
- Win7上使用Eclipse运行Nutch-Injector: java.io.IOException问题解决
- “当前不会命中断点。源代码与原始版本不同”的问题的有效解决办法
- Hadoop运行时JAVA_HOME is not set问题
- 经典算法问题的Java实现