Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2013, 13:04   #1
Uefa
Пользователь
 
Регистрация: 25.08.2013
Сообщений: 59
Восклицание (C++) Список инцидентности для графа

Всем привет! Не могу разобраться, где допустил ошибку. Задачка составляет список инцидентности для графа по матрице смежности, кол-во вершин и матрицу смежности вводим с клавиатуры.

Код:
#include <conio.h>
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;

struct stV 
{
	int number;
	stV *next;
	stV *sme;
};

int main()
{
	setlocale(0, "");

	int **a, n, i, j;

	cout << "Вводи кол-во вершин графа: ";
	cin >> n;

	a= new int *[n];
	for (i=0; i<n; i++)
		a[i] = new int [n];
	
	cout << "Теперь заполняй матрицу смежности!\n";
	cout << "Заполняется так: если между вершинами есть ребро, пиши 1, если нет ребра, тогда пиши 0, понятно??? \n";

	for (i=0; i<n; i++)
		for(j=0; j<n; j++)
		{
			cout << " a[" << i << "][" << j << "]= ";
			cin >> a[i][j];
			if (a[i][j] > 0)
				a[i][j]=1;
		}

		for (i=0; i<n; i++)
		{
			cout <<"\n";
		    for(j=0; j<n; j++)
				cout << a[i][j];
		}
// Формируем матрицу смежности!!!
		stV *P, *T, *R, *top;
		P = new stV;
		P->next = NULL;
		P->sme = NULL;
		P->number = 0;
		top = P;

		for (i=1; i<n; i++)
		{
			T = new stV;
			T->next = NULL;
			T->number = i;
			T->sme = NULL;
			P->next = T;
			P = T;
		}

		cout <<"\n";
		P = top;
		for (i=0; i<n; i++)
		{
			cout << P->number;
			P = P->next;
		}

		P = top;
		T = top;
		for (i=0; i<n; i++)
		{
			for (j=0; j<n; j++)
			 if(a[i][j] == 1)
			 {
				R = new stV;
				R->next = NULL;
				R->sme = NULL;
				R->number = j;
				P->sme = R;
				P = R;
		     }
			 T = T->next;
			 P = T;
		}
// Вывод списка инцидентности
		P = top;
		T = P->sme;
		cout << "\n\n";
		while (P!=NULL)
		{
			cout << "\nВершина №" << P->number;
			cout << "\nСмежные вершины: ";
			while (T!=NULL)
			{
				cout << T->number << " ";
				T = T->sme;
			}
			P = P->next;
			T = P->sme;
		}
		



	getch();
}
Работает все правильно и выводит правильный результат, но в конце компиляции выскакивает ошибка:
"Unhandled exception at 0x012245e0 in Deque.exe: 0xC0000005: Access violation reading location 0x00000008."
Видимо что-то с памятью напутал.

Последний раз редактировалось Uefa; 18.11.2013 в 13:08.
Uefa вне форума Ответить с цитированием
Старый 18.11.2013, 23:10   #2
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Вот здесь
Код:
			P = P->next;
			T = P->sme;
на последней итерации у тебя p равно NULL, и ты пытаешься взять из него p->sme.
Son Of Pain вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразование матрицы смежности в матрицу инцидентности для неорграфа Adidasss Паскаль, Turbo Pascal, PascalABC.NET 1 14.11.2012 21:39
создание графа по матрице и поиск кратчайшего пути из одного графа в другой lexflax Общие вопросы C/C++ 1 06.09.2012 07:32
Определение центра графа заданной матрице инцидентности emsisem Помощь студентам 3 27.10.2011 13:19
Определение центра графа заданной матрице инцидентности emsisem Общие вопросы C/C++ 2 27.10.2011 13:09
Определение центра графа заданной матрице инцидентности emsisem C++ Builder 0 27.10.2011 12:48