#32370: 問題


yp11051231@yphs.tp.edu.tw (910-36 楊宸)

學校 : 臺北市私立延平高級中學
編號 : 165190
來源 : [203.72.178.1]
最後登入時間 :
2024-04-13 11:45:10
a524. 手機之謎 | From: [203.72.178.1] | 發表日期 : 2022-10-03 17:30

求救! 誰可以跟我講我遞迴哪裡出問題?  它一直無窮迴圈......

 

# include <bits/stdc++.h>
using namespace std;

int n,i;
vector<int> ans;
vector<bool> vb(8,false);
void dfs(int x){
    ans.push_back(x);
    vb[x-1] = true;
    if (count(vb.begin(),vb.end(),false) == 8-n){
        for (int j=0; j<n; j++)  cout << ans[j];
        cout << '\n';
        ans = {i};
        for (int k=0; k<8; k++)  vb[k] = false;
        vb[n-1] = true;
    }
    else{
        for (int k=n; k>=1; k--){
            if (vb[k-1] == true)  continue;
            else                  dfs(k);
        }  
    }
    return;
}

int main()
{
    while (cin >> n){
        for (i=n; i>=1; i--){
            dfs(i);
            for (int j=0; j<8; j++)  vb[j]=false;
        }
    }

    return 0;
}

 

example 

input

3

output 

321

312

312

  .

  .

  .

 

 
#32420: Re: 問題


cges30901 (cges30901)

學校 : 不指定學校
編號 : 30877
來源 : [101.136.203.77]
最後登入時間 :
2024-04-07 15:34:14
a524. 手機之謎 | From: [39.9.78.197] | 發表日期 : 2022-10-09 09:05

求救! 誰可以跟我講我遞迴哪裡出問題?  它一直無窮迴圈......

 

# include
using namespace std;

int n,i;
vector ans;
vector vb(8,false);
void dfs(int x){
    ans.push_back(x);
    vb[x-1] = true;
    if (count(vb.begin(),vb.end(),false) == 8-n){
        for (int j=0; j        cout << '\n';
        ans = {i};
        for (int k=0; k<8; k++)  vb[k] = false;
        vb[n-1] = true;
    }
    else{
        for (int k=n; k>=1; k--){
            if (vb[k-1] == true)  continue;
            else                  dfs(k);
        }  
    }
    return;
}

int main()
{
    while (cin >> n){
        for (i=n; i>=1; i--){
            dfs(i);
            for (int j=0; j<8; j++)  vb[j]=false;
        }
    }

    return 0;
}

 

example 

input

3

output 

321

312

312

  .

  .

  .

 


因為你的vb和ans在遞迴中會整個被改掉,我覺得vb用不到可以刪掉,而ans只要在離開dfs()函式時pop_back就好,而不是在輸出時整個刪掉

 
ZeroJudge Forum