Untitled
user_5379400
plain_text
a year ago
1.5 kB
6
Indexable
#include<bits/stdc++.h> using namespace std; int n, m; int a[1000][1000]; int vis[1000]; int sz; int path[100]; void dfs(int u){ // path lưu đường đi từ điểm đầu tiên đến điểm hiện tại path[sz++] = u; vis[u] = 1; // duyệt qua hết các cạnh của u for (int i = 1; i <= n; i++){ int v = i; if (a[u][v] == 0) continue; // nếu chưa thăm thì dfs if (!vis[v]) dfs(v); // nếu v có giá trị là 1, nghĩa là chưa thăm xong đỉnh 1, trong path vẫn có đỉnh v, // và sau đấy lại đi đến v 1 lần nữa -> có chu trình else if (vis[v] == 1){ int j = sz - 1; // tìm giá trị j gần nhất có path[j] = v while(path[j] != v) j--; // in cout << sz - j + 1 << '\n'; for (int k = j; k < sz; k++){ cout << path[k] << ' '; } cout << v << '\n'; exit(0); } } // 2 nghĩa là đã thăm xong đinhr u vis[u] = 2; // sau khi thăm xong đinh u, gỡ đỉnh u khỏi đường đi sz--; } void solve(int testcase){ cin >> n >> m; for (int i = 0; i < m; i++){ int u, v; cin >> u >> v; a[u][v] = 1; } for (int i = 1; i <= n; i++){ if (!vis[i]) dfs(i); } cout << "IMPOSSIBLE"; } int main(){ //freopen("input.txt", "r", stdin); int t = 1; //cin >> t; for (int i = 1; i <= t; i++) solve(i); }
Editor is loading...
Leave a Comment