• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Топологическая сортировка графа

  • Автор темы Автор темы vitjok
  • Дата начала Дата начала

vitjok

Новые
Регистрация
29 Сен 2012
Сообщения
72
Реакции
0
Баллы
0
Топологическая сортировка графа

всем привет)) помогите изменить ввод критериев прохода вершин, чтоб все критерии вводились в строчку, а не запрашивая каждый раз пока не введешь терминатор.
Код:
#include <stdio.h>
#include <stdlib.h>
#define N 10
 
int main()
{
int n,i,j,k,w,que_sk=0,q,mas[N][N],que[N],result[N];
int criteria,zero_count=0;
 
printf("Enter n: ");
scanf("%d",&n);   //сколько врачей
 
for(i=0;i<n;i++)
{
    for(j=0;j<n;j++)
    {
        mas[i][j]=0;  //обнуляем матрицу перед вводом
    }
    que[i]=-1;   //матрица врачей, которых еще не прошли. не пройденный врач = -1
}
 
for(i=0;i<n;i++)   //ввод критериев для всех врачей
{
criteria=-1;
while(criteria!=0)    //вводить можно не более n критериев, ввод заканчивается если ввели n критериев или введен 0
{                     //вводить критерии по одному
    printf("Enter %d doc: ",i+1);
    scanf("%d",&criteria);
        if(criteria!=0)
           mas[i][criteria-1]=1;  //пишем критерии в матрицу
}
}
 
 
 
for(q=0;q<n;q++)        //цикл по всем врачам (n врачей)
{
que_sk=0;       //счетчик врачей, которых можно посетить
 
for(i=0;i<n;i++)    //начинаем проход по матрице
{
    while(que[i]!=-1&&i<n)  //выбираем строку матрицы для врача, которого еще не посещали
       i++;
 
    zero_count=0;
    for(j=0;j<n;j++)     //считаем количество нулей в строке
    {
       if(mas[i][j]==0)
            zero_count++;
    }
    if(zero_count==n)   //если в строке все нули, то врача можно посетить
    {
    //   printf("%d\n",i);
       result[q]=i+1;   //пишем номер врача в матрицу результата
       que[i]=0;    //отмечаем врача как пройденного
       que_sk++;
    }
}
 
if(que_sk==0)       //если в какой-то момент количество врачей, которых можно посетить = 0, то выводим ощибку и завершаем прогу
    goto err;
 
for(k=0;k<n;k++)  // обнуляем колонки матрицы с номерами врачей, которых посетили (чтоб они стали доступны для посещения)
    {
 
       if(que[k]==0)
              for(w=0;w<n;w++)
                   mas[w][k]=0;
    }
}
 
printf("\nResult: ");
for(i=0;i<n;i++)        //печатаем результат
    printf("%d ",result[i]);
system("pause");
return 0;
 
err:        //печатаем ошибку в случае неудачи
    printf("Nevozmozhno sozdatj ocheredj");
    system("pause");
    return 0;
 
}
 
Назад
Сверху