1 solutions
-
0
C++ :
#include <cstdio> #include <cstdlib> #include <algorithm> #include <cstring> #include <iomanip> #include<iostream> int nhuanghou(int x); int aprint(); using namespace std; int n; int sum=0; int answer[20]={0}; bool ys_zx[20]={false}; bool zs_ys[20]={false}; bool lie[20]={false}; int main() { cin>>n; nhuanghou(1); if(sum==0) cout<<"no solute!"<<endl; } int nhuanghou(int x) { for(int y=1;y<=n;y++) { if(ys_zx[x+y]==false&&zs_ys[x-y+8]==false&&lie[y]==false) { ys_zx[x+y]=true; zs_ys[x-y+8]=true; lie[y]=true; answer[x]=y; if(x==n) { sum++; aprint(); } else nhuanghou(x+1); ys_zx[x+y]=false; zs_ys[x-y+8]=false; lie[y]=false; answer[x]=0; } } } int aprint() { for(int i=1;i<=n;i++) cout<<setw(5)<<answer[i]; cout<<endl; }
Pascal :
program queen; const maxlen=100; var a:array[1..maxlen]of longint;//记录皇后的行坐标 b,c,d:array[-maxlen+1..2*maxlen]of longint;//行,右上,右下斜线的占位标志 m,n:longint; procedure queen(j:longint); var i:longint; begin if j>n then begin for i:=1 to n do write(a[i]:5);//满足条件,找到一种方案 writeln; exit; end; for i:=1 to n do//每个皇后位置有八种可能 if(b[i]=0)and(c[i+j]=0)and(d[j-i]=0)then//如果位置没有被占则运行 begin a[j]:=i;//皇后放置在此行 b[i]:=1;//占领第i行 c[i+j]:=1;//占领右上 d[j-i]:=1;//占领右下 queen(j+1);//递归 b[i]:=0;//回溯,恢复行占位标志 c[i+j]:=0;//回溯,恢复斜上方(右上)占位标志 d[j-i]:=0;///回溯,恢复斜下方(右下)占位标志 end; end; begin//主程序 read(n); for m:=-n+1 to 2*n do//数据初始化为0 begin b[m]:=0;//行数据初始化为0 c[m]:=0;//右上数据初始化为0 d[m]:=0;//右下数据初始化为0 end; queen(1);//开始放置第一个皇后 if a[n]=0 then write('no solute!'); end.
Java :
import java.util.Scanner; public class Main { static int sum; public static void main(String[] args) { Scanner in = new Scanner(System.in); while(in.hasNextInt()){ int n = in.nextInt(); int[] a = new int[n+1]; sum = 0; fun(a,1); if(sum==0) System.out.println("no solute!"); } } public static boolean isPlace(int[]a,int i){ for(int j=1;j<i;j++){ if(a[i]==a[j]||i+a[i]==j+a[j]||i-a[i]==j-a[j]) return false; } return true; } public static void fun(int[]a,int i){ if(i==a.length){ for(int k=1;k<a.length;k++){ System.out.printf("%5d",a[k]); } System.out.println(); sum++; return; } for(int k=1;k<a.length;k++){ a[i] = k; if(isPlace(a,i)) fun(a,i+1); } } }
- 1
Information
- ID
- 693
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- 10
- Tags
- # Submissions
- 3
- Accepted
- 1
- Uploaded By