Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define MAX 7
- vector<int> adj[MAX][MAX];
- int deg[MAX];
- bool vis[MAX];
- bool dfs(int u, int v)
- {
- if(u == v) return true;
- vis[u] = true;
- for(int i=0; i<MAX; i++){
- if(adj[u][i].size() > 0 || adj[i][u].size() > 0 && vis[i] == false){
- if(dfs(i, v)) return true;
- }
- }
- return false;
- }
- bool is_connected()
- {
- memset(vis, false, sizeof vis);
- for(int i=0; i<MAX; i++){
- if(deg[i] > 0){
- dfs(i, -1);
- break;
- }
- }
- for(int i=0; i<MAX; i++){
- if(deg[i] > 0 && vis[i] == false) return false;
- }
- return true;
- }
- int main()
- {
- int n;
- scanf("%d", &n);
- memset(deg, 0, sizeof deg);
- for(int i=0; i<n; i++){
- int u, v;
- scanf("%d %d", &u, &v);
- deg[u]++;
- deg[v]++;
- adj[u][v].push_back(i+1);
- }
- int odd = 0, curNode = -1;
- for(int i=0; i<MAX; i++){
- if(deg[i]%2 == 1){
- odd++;
- curNode = i;
- }
- }
- if((odd != 0 && odd != 2) || is_connected()){
- printf("-1");
- return 0;
- }
- if(odd == 0){
- for(int i=0; i<MAX; i++){
- if(deg[i] != 0){
- curNode = i;
- break;
- }
- }
- }
- for(int i=0; i<n; i++){
- bool forwrd;
- for(int j=0; j<MAX; j++){
- int selected_ind;
- if(adj[curNode][j].size() > 0 || adj[j][curNode].size() > 0){
- if(adj[curNode][j].size() > 0){
- selected_ind = adj[curNode][j].back();
- adj[curNode][j].pop_back();
- forwrd = true;
- }
- else {
- selected_ind = adj[j][curNode].back();
- adj[j][curNode].pop_back();
- forwrd = false;
- }
- deg[curNode]--;
- deg[j]--;
- memset(vis, 0, sizeof vis);
- if(deg[curNode] == 0 || dfs(curNode, j) == true){
- curNode = j;
- printf("%d %c\n", selected_ind, forwrd ? '+' : '-');
- break;
- }
- else {
- deg[curNode]++;
- deg[j]++;
- if(forwrd) adj[curNode][j].push_back(selected_ind);
- else adj[j][curNode].push_back(selected_ind);
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment