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