2011-03-12 7 views
10

मैं स्वीकार करूंगा कि यह मेरा होमवर्क है। कार्य बयान में कहा गया है कि मुझे एक ऐसा प्रोग्राम लिखना है जो एक ग्राफ का एक स्थलीय आदेश पाता है जिसे मानक इनपुट द्वारा इनपुट किया जाएगा। फिर मुझे इसे प्रोफेसर के सर्वर पर वर्गीकृत करने की आवश्यकता है।मोनो (होमवर्क से संबंधित) में संकलित होने पर सी # सूची के साथ समस्या

अब यह एल्गोरिदम समस्या नहीं है। यह एक तकनीकी समस्या है। मेरे कंप्यूटर में, मैं .NET कंपाइलर (सीएससी) का उपयोग करता हूं जबकि प्रोफेसर की ग्रेडिंग मशीन मोनो के कुछ रूपों का उपयोग करती है।

यह अच्छी तरह से काम करता है, जब तक कि ग्रेडर ने मुझे 30/100 प्राप्त नहीं किया। मेरे एक दोस्त ने सुझाव दिया कि मैं ग्रेडर की "मैनुअल इनपुट सिस्टम" का उपयोग करता हूं, इसलिए मैं यहां जाता हूं, मैंने इसे आसन्न सूची के लिए सरणी-10000 सूचियां बनाई हैं।

कुछ सेकंड के बाद, ग्रेडर ने बताया कि मेरा प्रोग्राम क्रैश हो गया है।

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 के बाद "मैनुअल इनपुट सिस्टम" ने कहा कि कार्यक्रम को मिला System.OutOfMemoryException। ग्रेडर के विभिन्न हिस्सों में आगे देखने के साथ छात्रों को अनुमति दी जाती है, ऐसा लगता है कि प्रोफेसर ने अपने ग्रेडिंग पैरामीटर को गलत तरीके से कॉन्फ़िगर किया और हमें घोषणा से कम स्मृति दी। (उन्होंने कहा "32 एमबी", लेकिन कार्यक्रम लगभग 16 एमबी पर दुर्घटनाग्रस्त हो जाता है)

मैंने उसे त्रुटि की सूचना दी है और वह (अभी अभी) देख रहा है।

+0

एक स्टैकट्रैक है, लेकिन क्या कोई वास्तविक अपवाद/त्रुटि संदेश है? –

+0

@ मैक्सिम यह सब मुझे आउटपुट से मिला है।मैंने एक और रूप लिया और यह भी पाया: "syscal: 2" (प्रश्न में भी संपादित) – LunaticNeko

+3

डेटा का उपयोग किया जाना चाहिए? आप पढ़ने वाले डेटा के आधार पर सरणी का उपयोग करते हैं। इतना बुरा डेटा = दुर्घटना। जब आप डेटा को पढ़ते हैं, तो आप कुछ सैनिटी चेक डाल सकते हैं, अपर्याप्त अपवादों को रोकने के लिए ... – xanatos

उत्तर

2

निम्नलिखित कोड विफल रहा है अगर u या v का मान 1 से भी कम समय

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]++; 
} 

क्योंकि u-1 या v-1 नकारात्मक होने जा रहा है, और कहा कि एक अपवाद फेंक नहीं है।

0

अनुवर्ती: यह अजीब, आत्म-उत्तर, और बहुत देर हो चुकी है क्योंकि मुझे अभी एहसास हुआ कि मुझे जवाब देना ठीक है। बाद में मुझे अधिसूचित किया गया कि मैं ग्रेडिंग सिस्टम द्वारा लागू स्मृति सीमा पर चला गया। हालांकि, अपवाद मेरे मामले में काफी गूढ़ था और ग्रेडर ने इस मुद्दे की रिपोर्ट नहीं की थी। (यह मुझे केवल गलत के रूप में चिह्नित करता है।)

मैं यह भी महसूस करने में काफी लापरवाह था कि छोटे इनपुट काम करते थे, और यही कारण है कि मुझे 30/100 और शून्य अंक नहीं मिला।

भविष्य के पाठकों के लिए: जब स्वचालित-ग्रेडर वातावरण में प्रोग्रामिंग करते हैं, तो कृपया सुनिश्चित करें कि आपका प्रोग्राम मेमोरी सीमा पर नहीं जाता है, जो वहां हो सकता है लेकिन आपको ज्ञात नहीं हो सकता है (यानी समस्या कथन में लिखा नहीं गया है)।

संबंधित मुद्दे