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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.10.2012, 12:48   #1
Lodyr
Пользователь
 
Регистрация: 15.12.2009
Сообщений: 69
По умолчанию Проверка на ацикличность

Код:
#include<fstream>
#include<sstream>
#include<iostream>
#include<string>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
ifstream in("in.txt");
ofstream out("out.txt");

	
int  main()
{   
    string s;
    int n,temp;
    in>>n; 

	int* was =  new int[n];
	for(int i=0;i<n; i++)
        {
            was[i]=0;
        }


	int** arr =  new int*[n];
    for(int i = 0; i<n;i++)
		{ 
			arr[i] = new int [n];
		}
	for(int i=0;i<n; i++)
        {
            for(int j=0;j<n;j++)
        {
            arr[i][j]=0;
        }
    }


    in.get();
    vector<vector<int>> vec(n);
    for(int i=0;i<n;i++)
    {
        std::stringstream ss;
        getline(in,s);
        ss<<s;
        while(!ss.eof())
        {
            ss>>temp;
            vec[i].push_back(temp);
        }
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<vec[i].size();j++)
            out<<vec[i][j]<<" ";
			out<<endl;
    }
	out<<endl;
	int k;
	for(int i=0;i<n;i++)
    {
        for(int j=0;j<vec[i].size();j++)
            if (vec[i][j]!=0) 
			{
				k=vec[i][j];
				arr[i][k-1]=1;
			}
    }
	
	for(int i=0;i<n; i++)
        {
            for(int j=0;j<n;j++)
        {
            out<<arr[i][j]<<" ";
        }
		out<<endl;
    }
	out<<endl;

	for(int i=0; i<n; i++)
	{
		out<<was[i]<<" ";
	}
	out<<endl;

	void dfs(int i)
	{
		if (was[i]==1)
		{
			out<<"граф НЕ является ацикличным";
		}
		if (was[i]!=0)
		{
			break;
		}
		if (was[i]==0)
		{
			was[i]=1;
			for (int j=0;j<n; j++)
			{
				if (arr[i][j]!=0)
				{
					dfs(j);
					was[i]=2;
				}
			}
		}
	}

	///////////////////////////////////////////
	//Поиск в глубину

	for(int i=0; i<n; i++)
	{
		if (was[i]==0) {dfs(i);}
	}


	///////////////////////////////////////////
	in.close();
	out.close();
    return 0;
}
From Stilet: В следующий раз тему закрою!
программа не работает, не понимаю в чем ошибка, подскажите = все работает до поиска в глубину

Последний раз редактировалось Stilet; 07.10.2012 в 12:58.
Lodyr вне форума Ответить с цитированием
Старый 07.10.2012, 12:53   #2
hon
Форумчанин
 
Регистрация: 08.06.2011
Сообщений: 693
По умолчанию

читаем правила форума! код оформляют кнопкой #
hon вне форума Ответить с цитированием
Старый 07.10.2012, 13:52   #3
Lodyr
Пользователь
 
Регистрация: 15.12.2009
Сообщений: 69
По умолчанию

входные данные список смежности
4
2 3 0
1 3 0
1 2 4 0
3 0
Lodyr вне форума Ответить с цитированием
Старый 07.10.2012, 15:51   #4
Lodyr
Пользователь
 
Регистрация: 15.12.2009
Сообщений: 69
По умолчанию

Код:
#include<fstream>
#include<sstream>
#include<iostream>
#include<string>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
ifstream in("in.txt");
ofstream out("out.txt");

 string s;
 int n,temp;
 int* was =  new int[n];
 int** arr =  new int*[n];

void dfs(int i)
	{
		if (was[i]==1)
		{
			out<<"граф НЕ является ацикличным";
		}
		if (was[i]!=0)
		{
			return;
		}
		was [i]=1;
		for (int j=0;j<n; j++)
	{
		if (arr[i][j]!=0)
		{
			dfs(j);
			was[i]=2;
		}
	}
	}

int main()
{   
   
    in>>n; 

	//int* was =  new int[n];
	for(int i=0;i<n; i++)
        {
            was[i]=0;
        }


	//int** arr =  new int*[n];
    for(int i = 0; i<n;i++)
		{ 
			arr[i] = new int [n];
		}
	for(int i=0;i<n; i++)
        {
            for(int j=0;j<n;j++)
        {
            arr[i][j]=0;
        }
    }


    in.get();
    vector<vector<int>> vec(n);
    for(int i=0;i<n;i++)
    {
        std::stringstream ss;
        getline(in,s);
        ss<<s;
        while(!ss.eof())
        {
            ss>>temp;
            vec[i].push_back(temp);
        }
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<vec[i].size();j++)
            out<<vec[i][j]<<" ";
			out<<endl;
    }
	out<<endl;
	int k;
	for(int i=0;i<n;i++)
    {
        for(int j=0;j<vec[i].size();j++)
            if (vec[i][j]!=0) 
			{
				k=vec[i][j];
				arr[i][k-1]=1;
			}
    }
	
	for(int i=0;i<n; i++)
        {
            for(int j=0;j<n;j++)
        {
            out<<arr[i][j]<<" ";
        }
		out<<endl;
    }
	out<<endl;

	for(int i=0; i<n; i++)
	{
		out<<was[i]<<" ";
	}
	out<<endl;

	///////////////////////////////////////////
	//Поиск в глубину
	
	for(int i=0; i<n; i++)
	{
		if (was[i]==0) {dfs(i);}
	}


	///////////////////////////////////////////
	in.close();
	out.close();
    return 0;
}
теперь хотя бы компилирует, вопрос как найти самый первый цикл в программе?
Lodyr вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка Кольша Общие вопросы Delphi 1 12.01.2012 20:03
Проверка if ViktorQQQ PHP 2 22.11.2011 23:44
excel.Проверка VBA и проверка функции Будда Помощь студентам 0 14.04.2011 21:10
проверка на IE TDrive JavaScript, Ajax 2 05.03.2010 13:41
Проверка Манжосов Денис :) Общие вопросы Delphi 4 17.10.2008 16:27