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