Признаюсь, это моя домашняя работа. В заявлении говорилось, что я должен написать программу, которая находит топологический порядок графа, который будет вводиться стандартным вводом. Затем мне нужно отправить его для оценки на сервере профессора.
Теперь это не проблема алгоритма. Это скорее техническая проблема. На своем компьютере я использую компилятор .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's 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: Я попытался сделать попытку программы сделать различные размеры массива из -list в диапазоне от 5000, 10000 и т. д., а после 40000 «система ручного ввода» сообщила, что программа получила исключение System.OutOfMemoryException. При дальнейшем изучении различных частей оценщика, в которые допускаются учащиеся, выясняется, что профессор неверно сконфигурировал свои параметры оценивания и оставил нам меньше памяти, чем было заявлено. (Он сказал «32MB», но программа вылетает примерно на 16MB)
I ' Я сообщил ему об ошибке, и он (прямо сейчас) изучает ее.