Технический форум

Технический форум (http://www.tehnari.ru/)
-   C/C++/С# (http://www.tehnari.ru/f42/)
-   -   Топологическая сортировка графа (http://www.tehnari.ru/f42/t96894/)

vitjok 10.06.2014 07:42

Топологическая сортировка графа
 
всем привет)) помогите изменить ввод критериев прохода вершин, чтоб все критерии вводились в строчку, а не запрашивая каждый раз пока не введешь терминатор.
Код:

#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;
 
}



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

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.