1 条题解
-
0
C :
#include<stdio.h> int a[1000],v[1000],n; void print(){ int i,total=0; for (i=1;i<=n;i++) if(total==0) printf("%d",a[i],total++); else printf(" %d",a[i]); //将每位输出 printf("\n"); //换行 } void DFS(int dep){ int i; if (dep==n) print(); //如果搜到一个结果输出 dep++; //查找当前要处理位 for (i=1;i<=n;i++) { //枚举当前位 if (v[i]) continue; //如果这个数之前被选过就跳过 v[i]=1; //选中当前位 a[dep]=i;//将当前位存入数组 DFS(dep);//搜索下一位 v[i]=0;//取消选中当前位 } } int main(){ scanf("%d",&n); //读入 DFS(0); //深搜 return 0; system("pause"); //暂停(查看结果) }
C++ :
#include<cstdio> #include<cstdlib> #include<iostream> #include<algorithm> using namespace std; int n; bool a[11]={0}; int b[11]; int print() { for(int i=1;i<=n-1;++i) { printf("%d ",b[i]); } printf("%d\n",b[n]); } int search(int i) { for(int j=1;j<=n;++j) { if(a[j]==0) { b[i]=j; a[j]=1; if(i==n) { print(); } else { search(i+1); } a[j]=0; } } } int main() { cin>>n; search(1); return 0; }
Pascal :
var i,j,k,m,n:longint; a:array[0..1000]of longint; b:array[0..1000]of boolean; procedure make(t:longint); var i:longint; begin if t=n+1 then begin write(a[1]);for i:=2 to n do write(' ',a[i]);writeln; exit; end; for i:=1 to n do if not b[i] then begin b[i]:=true;a[t]:=i; make(t+1); b[i]:=false; end; end; begin readln(n); make(1); end.
Java :
import java.util.Scanner; public class Main { static int n = 0; static int [] book,a; public static void main(String[] args) { Scanner cin = new Scanner(System.in); n = cin.nextInt(); book = new int[n+1]; a = new int[n+1]; for(int i = 0; i <= n; i ++) book[i] = 0; dfs(1); } public static void dfs(int i) { if(i>n) { for(int k = 1; k <= n; k++) { System.out.print(a[k]); if(k != n) { System.out.print(" "); }else { System.out.println(); } } }else { for(int k = 1; k <= n; k ++) { if(book[k]==0) { book[k] = 1; a[i] = k; dfs(i+1); book[k] = 0; } } } } }
- 1
信息
- ID
- 397
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者