#45952: C++遞迴解法


a0827peter@gmail.com (ㄧ尾)

學校 : 不指定學校
編號 : 307382
來源 : [61.58.188.108]
最後登入時間 :
2025-04-25 22:16:29
c291. APCS 2017-0304-2小群體 -- 2017年3月APCS | From: [61.58.188.108] | 發表日期 : 2025-05-03 23:24

先建立陣列將資料全部輸入,再用for迴圈遍歷該陣列,如果讀到的數尚未標記過則輸入朋友和結束值進入遞迴且計數器要加一,每次遞迴都要標記讀過的數,而且要記得標記root,如果讀到結束值則該次遞迴結束

#include <bits/stdc++.h>
using namespace std;
int a[10000];

void go(int x,int tend){
    int t=a[x];
    
    if(x!=tend){
        a[x]=-1;
        go(t,tend);
    }
    
    
}

int main() {
    int n,sum=0;
    cin>>n;
    
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    
    for(int i=0;i<n;i++){
        if(a[i]!=-1){
            sum++;
            int t = a[i];
            a[i] = -1;       // 這行是關鍵:標記自己已走過
            go(t, i);
        }
    }

    cout<<sum;

    return 0;
}

 
ZeroJudge Forum