Я признаю, что это моя домашняя работа. В заявлении задачи сказано, что я должен написать программу, которая находит топологический порядок графика, который будет вводиться стандартным вводом. Затем мне нужно отправить его на класс профессора.
Теперь это не проблема алгоритма. Это скорее техническая проблема. В моем компьютере я использую компилятор .NET(csc), в то время как машина оценки профессора использует некоторую форму моно.
Это хорошо работает, пока грейдер не сказал, что я получил 30/100. Один из моих друзей предложил использовать грейдерную "систему ввода вручную", поэтому я пошел, я создал списки массивов из 100000 для списка смежности.
Грейдер спустя несколько секунд сообщил, что моя программа потерпела крах.
Stacktrace:
at (wrapper managed-to-native) object.__icall_wrapper_mono_object_new_fast (intptr) <0x00004>
at (wrapper managed-to-native) object.__icall_wrapper_mono_object_new_fast (intptr) <0xffffffff>
at System.Exception.ToString () <0x00026>
at (wrapper runtime-invoke) object.runtime_invoke_object__this__ (object,intptr,intptr,intptr) <0xffffffff>
at (wrapper managed-to-native) object.__icall_wrapper_mono_object_new_fast (intptr) <0x00004>
at (wrapper managed-to-native) object.__icall_wrapper_mono_object_new_fast (intptr) <0xffffffff>
at System.Exception.ToString () <0x00026>
at (wrapper runtime-invoke) object.runtime_invoke_object__this__ (object,intptr,intptr,intptr) <0xffffffff>
at (wrapper managed-to-native) object.__icall_wrapper_mono_object_new_fast (intptr) <0x00004>
at (wrapper managed-to-native) object.__icall_wrapper_mono_object_new_fast (intptr) <0xffffffff>
at System.Exception.ToString () <0x00026>
at (wrapper runtime-invoke) object.runtime_invoke_object__this__ (object,intptr,intptr,intptr) <0xffffffff>
at (wrapper managed-to-native) object.__icall_wrapper_mono_object_new_fast (intptr) <0x00004>
at (wrapper managed-to-native) object.__icall_wrapper_mono_object_new_fast (intptr) <0xffffffff>
at System.Exception.ToString () <0x00026>
at (wrapper runtime-invoke) object.runtime_invoke_object__this__ (object,intptr,intptr,intptr) <0xffffffff>
at (wrapper managed-to-native) object.__icall_wrapper_mono_object_new_fast (intptr) <0x00004>
at (wrapper managed-to-native) object.__icall_wrapper_mono_object_new_fast (intptr) <0xffffffff>
at System.Exception.ToString () <0x00026>
at (wrapper runtime-invoke) object.runtime_invoke_object__this__ (object,intptr,intptr,intptr) <0xffffffff>
at (wrapper managed-to-native) object.__icall_wrapper_mono_object_new_fast (intptr) <0x00004>
at (wrapper managed-to-native) object.__icall_wrapper_mono_object_new_fast (intptr) <0xffffffff>
at System.Exception.ToString () <0x00026>
at (wrapper runtime-invoke) object.runtime_invoke
Это странно и тревожно для меня, но мне еще предстоит найти ответ. Опять же, эта программа отлично работала на моем ПК.
Это моя часть программы:
using System;
using System.Collections;
using System.Collections.Generic;
class topo{
public static void Main(){
string[] ST = Console.ReadLine().Split(' ');
int N=Convert.ToInt32(ST[0]), M=Convert.ToInt32(ST[1]);
int[] ins = new int[N]; //node total in-degrees
List<int>[] E = new List<int>[N];
for(int n=0;n<N;n++)
E[n] = new List<int>();
for(int m=0;m<M;m++){
ST = Console.ReadLine().Split(' ');
int u = Convert.ToInt32(ST[0]);
int v = Convert.ToInt32(ST[1]);
E[u-1].Add(v-1);
ins[v-1]++;
}
Queue S = new Queue();
List<int> L = new List<int>(); //result list
for(int n=0;n<N;n++){
//add stranded nodes directly and don't process it
if(ins[n]==0 && E[n].Count==0)
L.Add(n);
//put into queue
else if(ins[n]==0)
S.Enqueue(n);
}
while(S.Count>0){
int n = (int) S.Dequeue();
L.Add(n);
foreach(int m in E[n])
if(--ins[m]==0)
S.Enqueue(m);
}
foreach(int n in L)
Console.WriteLine(n+1);
}
}
Большое спасибо, и я ценю любой ответ.
Изменить: я еще раз взглянул на выход грейдера, чтобы увидеть, пропустил ли я что-нибудь, и действительно сделал. Он сказал "syscal: 2", но все, что я знаю об этом, это то, что "программа не выходила нормально".
Изменить № 2: я попытался сделать попытку программы сделать различные размеры массива списка, начиная от 5000, 10000 и т.д., а после 40000 "система ручного ввода" заявила, что программа получила Систему .OutOfMemoryException. С дальнейшим изучением различных частей грейдера, которым разрешены студенты, кажется, что проф неправильно сконфигурировал его параметры сортировки и дал нам меньше памяти, чем было объявлено. (Он сказал "32 МБ", но программа вылетает около 16 МБ)
Я сообщил ему об ошибке, и он (прямо сейчас) изучает его.