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

java n皇后

2015-06-07 22:30 585 查看
//http://acm.hdu.edu.cn/showproblem.php?pid=2553

//JAVA代码

import java.util.Scanner;

import java.util.concurrent.ConcurrentHashMap;

public class nQueen {

static int n;

static int count;

static int num[]=new int[21];

static boolean place(int j){

for(int i=0;i<j;i++){

if(num[i]==num[j]||Math.abs(num[i]-num[j])==Math.abs(i-j)){

return false;

}

}

return true;

}

static void search(int i){

if(i==n){

count++;

return;

}else{

for(int j=0;j<n;j++){

num[i]=j;

if(place(i)){

search(i+1);

}

}

}

}

public static void main(String[] args){

Scanner inScanner=new Scanner(System.in);

System.out.println("请输入皇后的个数:");

while(inScanner.hasNext()){

count=0;

n=inScanner.nextInt();

int begin=(int)System.currentTimeMillis();

search(0);

System.out.println("共有 "+count+" 种");

int end=(int)System.currentTimeMillis();

System.out.println("用时:"+(end-begin));

}

}

}

//C代码

#include <stdio.h>

#include<math.h>

#include <stdlib.h>

int num[11];

int count;

int n;

int place(int j){

int i;

for(i=0;i<j;i++){

if(num[i]==num[j]||abs(num[i]-num[j])==abs(i-j)){

return 0;

}

}

return 1;

}

int search(int i){

if(i==n)

count++;

else{

int j;

for(j=0;j<n;j++){

num[i]=j;

if(place(i)){

search(i+1);

}

}

}

return count;

}

int main(){

int sum[11],m;

for(n=1;n<=10;n++){

count=0;

sum
=search(0);

}

while(scanf("%d",&m)!=EOF&&m!=0){

printf("%d\n",sum[m]);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: