洛谷P1706(dfs)

學dfs一年了,但是感覺還是不會,沒辦法,只有在學了,關鍵是我不能理解它的遞歸的思想,每次只要遞歸我就有點不太懂了,可能是自己太笨了吧,沒事,熟能生巧,既然不會,那我就在多刷幾道題就行了。

洛谷P1706

這個題的意思很簡單,大致意思就是給你一個n輸出1~n的全排列,直接dfs搜索就行了,

感覺也沒有啥好說的,直接給出代碼吧,並附上詳細的註釋。

#include<bits/stdc++.h>
using namespace std;
int a[103],b[103],n;//a數組用作輸出用,b數組用作標記,就是走過的點不在走
void print()         //輸出函數.
{
    for(int i=1;i<=n;i++)
        printf("%5d",a[i]);
    printf("\n");
}
void dfs(int k)
{
    if(k==n)     //遞歸終止的條件
    {
        print();
        return;
    }
    for(int i=1;i<=n;i++)   
    {
        if(!b[i])
        {
            b[i]=1;
            a[k+1]=i;
            dfs(k+1);
            b[i]=0;//回溯的時候要把用過的點歸零.
        }
    }
}
int main()
{
    cin>>n;
    dfs(0);
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章