,   CyberForum.ru

- C++

 
sebornavi
0 / 0 / 0
: 22.02.2014
: 4
24.03.2014, 20:23     #1
, ?

, , .

:


C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#include <iostream.h>
#include <stdio.h>
 
struct Node{
    int inf;
   Node *next;
};
 
//============================Stack==============================
 
Node *init(){     //  
    return NULL;
}
 
void push(Node *&st,int dat){  //    
    Node *el = new Node;
   el->inf = dat;
   el->next = st;
   st=el;
}
 
int pop(Node *&st){       //   
    int value = st->inf;
   Node *temp = st;
   st = st->next;
   delete temp;
   return value;
}
 
int peek(Node *st){     //     
    return st->inf;
}
 
//==============================================================
 
Node **graph;   //   
 
const int vertex = 1; //  
 
FILE* fi = fopen("e_graph.txt","r"); //   
FILE* fo = fopen("e_cycle.txt","w"); //  
 
void add(Node*& list,int data){  //  
   if(!list){list=new Node;list->inf=data;list->next=0;return;}
   Node *temp=list;
   while(temp->next)temp=temp->next;
   Node *elem=new Node;
   elem->inf=data;
   elem->next=NULL;
   temp->next=elem;
}
 
void del(Node* &l,int key){ //   key  
   if(l->inf==key){Node *tmp=l; l=l->next; delete tmp;}
   else{
    Node *tmp=l;
        while(tmp){
        if(tmp->next) //   
            if(tmp->next->inf==key){  //   
                Node *tmp2=tmp->next;
                tmp->next=tmp->next->next;
                delete tmp2;
            }
        tmp=tmp->next;
    }
   }
}
 
bool eiler(Node **gr,int num){ //   
   int count;
    for(int i=0;i<num;i++){  //  
      count=0;
      Node *tmp=gr[i];
    while(tmp){       //  
        count++;
         tmp=tmp->next;
      }
      if(count%2==1)return 0; //  
   }
   return 1;   //   
}
 
void eiler_path(Node **gr){ // 
   Node *S = init();//     
   int v=vertex;// 1  ()
   int u;
   printf("\n Rezult \n");
    push(S,v); //   
   while(S){  //   
    v = peek(S); //  
        if(!gr[v]){ //    
        v=pop(S); fprintf(fo,"%d ",v); //   
            printf("%d ",v); //   
      }else {
        u=gr[v]->inf; push(S,u);  //   
        del(gr[v],u); del(gr[u],v); //  
      }
   }
   printf("\n");
}
 
int main(){
   int n; //  
   int zn;//  
    fscanf(fi,"%d",&n); graph=new Node*[n];
   for(int i=0;i<n;i++)graph[i]=NULL;
   for( i=0;i<n;i++)   //   
   {    for(int j=0;j<n;j++)
    {
         fscanf(fi,"%d",&zn);
         printf("%d ",zn);
            if(zn) add(graph[i],j);
      }
   printf("\n");
   }
 
   if(eiler(graph,n))eiler_path(graph);
   else fprintf(fo,"   .");
    return(0);
}
Similar
41792 / 34177 / 6122
: 12.04.2006
: 57,940
24.03.2014, 20:23    
:

, C++



:
.
mustimur
268 / 222 / 57
: 22.11.2013
: 832
: 1
24.03.2014, 20:31     #2
:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#define  _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdio.h>
 
struct Node{
    int inf;
   Node *next;
};
 
//============================Stack==============================
 
Node *init(){     //  
    return NULL;
}
 
void push(Node *&st,int dat){  //    
    Node *el = new Node;
   el->inf = dat;
   el->next = st;
   st=el;
}
 
int pop(Node *&st){       //   
    int value = st->inf;
   Node *temp = st;
   st = st->next;
   delete temp;
   return value;
}
 
int peek(Node *st){     //     
    return st->inf;
}
 
//==============================================================
 
Node **graph;   //   
 
const int vertex = 1; //  
 
FILE* fi = fopen("e_graph.txt","r"); //   
FILE* fo = fopen("e_cycle.txt","w"); //  
 
void add(Node*& list,int data){  //  
   if(!list){list=new Node;list->inf=data;list->next=0;return;}
   Node *temp=list;
   while(temp->next)temp=temp->next;
   Node *elem=new Node;
   elem->inf=data;
   elem->next=NULL;
   temp->next=elem;
}
 
void del(Node* &l,int key){ //   key  
   if(l->inf==key){Node *tmp=l; l=l->next; delete tmp;}
   else{
    Node *tmp=l;
        while(tmp){
        if(tmp->next) //   
            if(tmp->next->inf==key){  //   
                Node *tmp2=tmp->next;
                tmp->next=tmp->next->next;
                delete tmp2;
            }
        tmp=tmp->next;
    }
   }
}
 
bool eiler(Node **gr,int num){ //   
   int count;
    for(int i=0;i<num;i++){  //  
      count=0;
      Node *tmp=gr[i];
    while(tmp){       //  
        count++;
         tmp=tmp->next;
      }
      if(count%2==1)return 0; //  
   }
   return 1;   //   
}
 
void eiler_path(Node **gr){ // 
   Node *S = init();//     
   int v=vertex;// 1  ()
   int u;
   printf("\n Rezult \n");
    push(S,v); //   
   while(S){  //   
    v = peek(S); //  
        if(!gr[v]){ //    
        v=pop(S); fprintf(fo,"%d ",v); //   
            printf("%d ",v); //   
      }else {
        u=gr[v]->inf; push(S,u);  //   
        del(gr[v],u); del(gr[u],v); //  
      }
   }
   printf("\n");
}
 
int main(){
   int n; //  
   int zn;//  
    fscanf(fi,"%d",&n); graph=new Node*[n];
   for(int i=0;i<n;i++)graph[i]=NULL;
   for(int i=0;i<n;i++)   //   
   {    for(int j=0;j<n;j++)
    {
         fscanf(fi,"%d",&zn);
         printf("%d ",zn);
            if(zn) add(graph[i],j);
      }
   printf("\n");
   }
 
   if(eiler(graph,n))eiler_path(graph);
   else fprintf(fo,"   .");
    return(0);
}
( VS, ). . ..
BoyStyle
   BoyStyle
7 / 7 / 0
: 24.02.2014
: 301
: 1
24.03.2014, 20:44     #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include <iostream>
#include <stdio.h>
 
struct Node{
    int inf;
   Node *next;
};
 
//============================Stack==============================
 
Node *init(){     // È*èöè*ëèç*öèÿ ñòåê*
    return NULL;
}
 
void push(Node *&st,int dat){  // Ç*ãðóçê* ÷èñë* â ñòåê
    Node *el = new Node;
   el->inf = dat;
   el->next = st;
   st=el;
}
 
int pop(Node *&st){       // Èçâëå÷å*èå èç ñòåê*
    int value = st->inf;
   Node *temp = st;
   st = st->next;
   delete temp;
   return value;
}
 
int peek(Node *st){     // Ïîëó÷å*èå ÷èñë* áåç åãî èçâëå÷å*èÿ
    return st->inf;
}
 
//==============================================================
 
Node **graph;   // Ì*ññèâ ñïèñêîâ ñìåæ*îñòè
 
const int vertex = 1; // Ïåðâ*ÿ âåðøè**
 
FILE* fi = fopen("e_graph.txt","r"); //Ô*éë ñ ì*òðèöåé ñìåæ*îñòè
FILE* fo = fopen("e_cycle.txt","w"); // Ðåçóëüòèðóþùèé ô*éë
 
void add(Node*& list,int data){  //Äîá*âëå*èå ñìåæ*îé âåðøè*û
   if(!list){list=new Node;list->inf=data;list->next=0;return;}
   Node *temp=list;
   while(temp->next)temp=temp->next;
   Node *elem=new Node;
   elem->inf=data;
   elem->next=NULL;
   temp->next=elem;
}
 
void del(Node* &l,int key){ // Óä*ëå*èå âåðøè*û key èç ñïèñê*
   if(l->inf==key){Node *tmp=l; l=l->next; delete tmp;}
   else{
    Node *tmp=l;
        while(tmp){
        if(tmp->next) // åñòü ñëåäóþù*ÿ âåðøè**
            if(tmp->next->inf==key){  // è î** èñêîì*ÿ
                Node *tmp2=tmp->next;
                tmp->next=tmp->next->next;
                delete tmp2;
            }
        tmp=tmp->next;
    }
   }
}
 
bool eiler(Node **gr,int num){ // Îïðåäåëå*èå ýéëåðîâîñòè ãð*ô*
   int count;
    for(int i=0;i<num;i++){  //ïðîõîäèì âñå âåðøè*û
      count=0;
      Node *tmp=gr[i];
    while(tmp){       // ñ÷èò*åì ñòåïå*ü
        count++;
         tmp=tmp->next;
      }
      if(count%2==1)return 0; // ñòåïå*ü *å÷åò**ÿ
   }
   return 1;   // âñå ñòåïå*è ÷åò*ûå
}
 
void eiler_path(Node **gr){ //Ïîñòðîå*èå öèêë*
   Node *S = init();// Ñòåê äëÿ  ïðîéäå**ûõ âåðøè*
   int v=vertex;// 1ÿ âåðøè** (ïðîèçâîëü**ÿ)
   int u;
   printf("\n Rezult \n");
    push(S,v); //ñîõð**ÿåì åå â ñòåê
   while(S){  //ïîê* ñòåê *å ïóñò
    v = peek(S); // òåêóù*ÿ âåðøè**
        if(!gr[v]){ // åñëè *åò è*öèäå*ò*ûõ ðåáåð
        v=pop(S); fprintf(fo,"%d ",v); //âûâîäèì âåðøè*ó â ô*éë
            printf("%d ",v); //âûâîäèì âåðøè*ó ** ýêð**
      }else {
        u=gr[v]->inf; push(S,u);  //ïðîõîäèì â ñëåäóþùóþ âåðøè*ó
        del(gr[v],u); del(gr[u],v); //óä*ëÿåì ïðîéäå**îå ðåáðî
      }
   }
   printf("\n");
}
 
int main()
{
   int n; // Êîëè÷åñòâî âåðøè*
   int zn;// Òåêóùåå ç**÷å*èå
    fscanf(fi,"%d",&n); graph=new Node*[n];
   for(int i=0;i<n;i++)graph[i]=NULL;
    for (int i = 0; i < n; i++)
     // ç*ïîë*ÿåì ì*ññèâ ñïèñêîâ
   
   {    for(int j=0;j<n;j++)
    {
         fscanf(fi,"%d",&zn);
         printf("%d ",zn);
            if(zn) add(graph[i],j);
      }
   printf("\n");
   }
 
   if(eiler(graph,n))eiler_path(graph);
   else fprintf(fo,"Ãð*ô *å ÿâëÿåòñÿ ýéëåðîâûì.");
    return(0);
}
:
C++
1
for( i=0;i<n;i++)
}
Yandex
24.03.2014, 20:44    

: 23:58. GMT +3.
- , ,
-
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
@Mail.ru