Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- int ml = 1000000000, cnt = 0;
- void dfs(vector<bool> used, vector< vector<int> > edg, int st, int cur, vector<int> path){
- path.push_back(cur);
- used[cur] = true;
- for (int i = 0; i < edg[cur].size(); i++){
- if (edg[cur][i] == st){
- if (path.size() < ml){
- ml = path.size();
- cnt = 1;
- }
- else if (path.size() == ml)
- cnt += 1;
- }
- //cout << used[edg[cur][i]];
- if (path.size() < ml && not used[edg[cur][i]]) {
- dfs(used, edg, st, edg[cur][i], path);
- }
- }
- int x = path[-1];
- path.pop_back();
- //used[x] = 0;
- return;
- }
- int main() {
- freopen("cycle.in", "r", stdin);
- freopen("cycle.out", "w", stdout);
- int n, x;
- cin >> n >> x;
- vector <vector<int>> edg;
- vector<bool> used;
- for (int i = 0; i < n; i++){
- used.push_back(false);
- string s;
- cin >> s;
- vector <int> a;
- for (int j = 0; j < n; j++) {
- if (s[j] == '1') {
- a.push_back(j);
- }
- }
- edg.push_back(a);
- }
- vector <int> p;
- dfs(used, edg, x - 1, x - 1, p);
- if (cnt == 0)
- cout << -1;
- else
- cout << ml << " " << cnt;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement