Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
sebornavi
0 / 0 / 0
Регистрация: 22.02.2014
Сообщений: 4
#1

Ошибка - C++

24.03.2014, 20:23. Просмотров 158. Ответов 2
Метки нет (Все метки)

После компиляции выдает сообщение об ошибке приложения, что не так?

В заданном графе необходимо определить, существует ли цикл, проходящий по каждому ребру графа только один раз.

Код программы:


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     Ошибка
Посмотрите здесь:

IIS- asp ошибка: HTTP 500.100 - Внутренняя ошибка сервера - ошибка ASP Internet Information Services - C# ASP.NET
Привет! Конфигурация win2000pro sp2, стандартный IIS, IE 5. При попытке обратиться к сценарию(asp) получаю ошибку: &lt;пропуск&gt; ......

1C 8.x Ошибка при чтении изменений при обмене РИБ: Ошибка при вызове метода контекста (ПрочитатьИзменения): Ошибка записи! - 1С
Доброго всем времени суток! подскажи пожалуйста как исправить ошибку: Ошибка при чтении изменений при обмене РИБ: Ошибка при вызове...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
7 / 7 / 0
Регистрация: 24.02.2014
Сообщений: 302
Завершенные тесты: 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++)
и ещё там с } намудрил немного
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru