Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > C/C++/С#


Ответ
 
Опции темы Опции просмотра
Старый 10.06.2014, 07:42   #1 (permalink)
vitjok
Member
 
Регистрация: 29.09.2012
Сообщений: 72
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Топологическая сортировка графа

всем привет)) помогите изменить ввод критериев прохода вершин, чтоб все критерии вводились в строчку, а не запрашивая каждый раз пока не введешь терминатор.
Код:
#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;
 
}
vitjok вне форума   Ответить с цитированием

Старый 10.06.2014, 07:42
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

С вашей темой схожи следующие топики, рекомендую обратить внимание

Сортировка массива
Сортировка на C#
Сортировка в Vista
Сортировка по алфавиту
Задача почтальона для смешанного графа

Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 08:26.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.