dfs深さ優先検索

808 ワード

今日、桐桐の先生は数学の宿題を出して、数字1から数字nまでの連続自然数の配列をすべてリストすることを要求して、発生した任意の数字のシーケンスの中で重複する数字が現れないことを要求します.並べて数が多く、書き落としを恐れた桐桐は、コンピュータープログラミングで解決することにした.
入力は整数n(1≦n≦9)のみです.
出力は、1〜nからなる重複しないすべての数値シーケンスを辞書順に出力し、各行に1つのシーケンスがあり、各数値の間にスペースがある.
サンプル入力コピーサンプルデータ3サンプル出力
#include 
#include 
int a[10],book[10],n;
void dfs(int step)
{
    int i;
    if(step==n+1)
    {
        for(i=1;i<=n;i++)
            printf("%d ",a[i]);
        printf("
"); return; } for(i=1;i<=n;i++) { if(book[i]==0) { a[step]=i; book[i]=1; dfs(step+1); book[i]=0; } } return; } int main() { scanf("%d",&n); dfs(1); return 0; }