관리 메뉴

Mini

[틀림] 백준 13023 ABCDE // vis 초기화(백트래킹) 필요한 이유 본문

Algorithm/back_tracking

[틀림] 백준 13023 ABCDE // vis 초기화(백트래킹) 필요한 이유

Mini_96 2025. 3. 26. 02:44

https://www.acmicpc.net/problem/13023

* 백트래킹 복습

  • depth가 5이상인지 검사
  • 이때, vis=0으로 백트래킹 필요

  • 즉, 원복시키면서 완탐을 하려고 원상복귀를  하는것이다.
  • 완탐을하려면 원복이 필요!

 

 

* 풀이

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

typedef long long ll;

int n,m,ret;
int vis[2004];
vector<int> adj[2004];

int dfs(int cur, int depth) {
   
   if(depth==5) {
      cout<<1;
      exit(0);
   }

   vis[cur]=1;
   int ret = 1;
   for(auto nxt : adj[cur]) {
      if(vis[nxt]) continue;
      ret+=dfs(nxt,depth+1);
   }
   vis[cur]=0; // 탐색후 풀어줘야함!
   return ret;
}

int main() {
   ios_base::sync_with_stdio(0);
   cin.tie(0); cout.tie(0);

   cin>>n>>m;

   for(int i=0;i<m;++i) {
      int a,b;
      cin>>a>>b;
      adj[a].push_back(b);
      adj[b].push_back(a); //a와 b가 친구 -> 양방향맞음
   }

   for(int i=0;i<n;++i) {
      memset(vis,0,sizeof(vis));
      dfs(i,1);
      // if(vis[i]) continue;
      
      // if(dfs(i)>=5) {
      //    cout<<1;
      //    exit(0);
      // }
   }
   // dfs(0);
   // for(int i=0;i<n;++i) {
   //    if(!vis[i]) {
   //       cout<<0;
   //       exit(0);
   //    }
   // }

   cout<<0;
   
   return 0;
}