您的位置:首页 > 编程语言 > Java开发

经典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 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java list string class