2_算法_全排列

来源:互联网 发布:诲汝知之乎悔的读音 编辑:程序博客网 时间:2024/06/14 15:55

用回溯法来输出全排列

1.C++

// 2_全排列回溯+DFS.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<iostream>using namespace std;int arr[5];int status[5];int num;void DFS(int arr[], int status[],int step){if (step == num+1){for (int i = 1; i <= num; i++){cout << arr[i] << "|";}cout << endl;return;}for (int i = 1; i <= num; i++){if (status[i] == 0){status[i] = 1;arr[step] = i;DFS(arr, status, step + 1);status[i] = 0;}}}int main(){while (1){cout << "个数:" << endl;cin >> num;for (int i = 1; i <= num; i++){//arr[i] = i;status[i] = 0;}DFS(arr, status, 1);}    return 0;}

2.java

import java.util.Scanner;public class Main {public static void DFS(int[] arr,int[] status,int step,int num){if(step==num+1){for(int c:arr)System.out.print(c+"|");System.out.println();return;}for(int i=1;i<=num;i++){if(status[i]==0){status[i]=1;arr[step]=i;DFS(arr,status,step+1,num);status[i]=0;}}}public static void main(String[] args) {// TODO Auto-generated method stubScanner sc=new Scanner(System.in);while(true){System.out.println("请输入个数:");int num=sc.nextInt();int[] arr=new int[num+1];int[] status=new int[num+1];for(int c:status){status[c]=0;}DFS(arr,status,1,num);}}}


0 0
原创粉丝点击