jimbakl Δημοσ. 3 Μαρτίου 2012 Δημοσ. 3 Μαρτίου 2012 Καλησπέρα σας. Έχω ένα πρόβλημα με τον αλγόριθμο του dijkstra για το παρακάτω δίκτυο όπου -1 δεν είναι εφικτή η σύνδεση των δύο κόμβων. πρέπει να λύσω τον αλγόριθμο με χρησιμοποιώντας labels σε κάθε κόμβο. δλδ το path και την συνολική απόσταση μέχρι τον κάθε κόμβο. Είμαι σε αυτό το σημείο, αλλά μου βγάζει bus error. Φταίει τίποτα στους δείκτες που μπορείτε να βοηθήσετε; και 2ον μήπως μπορείτε να με βοηθήσετε να τελειώσω τον αλγόριθμο;;; Μπορεί να έχω βγεί τελείως εκτός αλλά δεν ξέρω γιατί μου έχει βγάλει αυτό το σφάλμα με το bus error. > #include<stdio.h> #include<stdlib.h> #define MAX_NODES 999999 //#define INFINITY 99999999999 struct node{ int distance; enum {solved, unsolved} label; int id; int path[MAX_NODES]; int previous; }node[MAX_NODES]; main(){ //===DECLARATIONS START============================================================ int i, j, n, node_id[n],min,next; int **dis; int *path; struct node *p; FILE*fp=fopen("data.txt","r"); fscanf(fp,"%d",&n); printf("\n%d\n",n); path=(int*)calloc(n,sizeof(int)); dis=(int**)calloc(n,sizeof(int)); for(i=0;i<n;i++){ dis[i]=(int*)calloc(n,sizeof(int)); } //====DECLARATIONS END============================================================= //===READ DATA FROM FILE START===================================================== for(i=0;i<n;i++){ for(j=0;j<n;j++){ fscanf(fp,"%d",&dis[i][j]); printf("%d\t",dis[i][j]); } printf("\n"); } fclose(fp); //====READ DATA FROM FILE END======================================================= //====NODES_ID 1D MATRIX START======================================================= /* for(i=0;i<n;i++){ node_id[i]=i; // dimiourgia pinaka 1D me ta id twn nodes } node_id[0]=src; //src == o arxikos kombos node_id[n]=des; */ //des == o telikos kombos //====NODES_ID 1D MATRIX END======================================================= //====INITIALIZATION START======================================================= for(p=&node[0] ; p<&node[n] ;p++){ p->label=unsolved; p->distance=0; // p->id=p; p->previous=-1; } node[0].label=solved; //i declare node 0 as solved. //====INITIALIZATION END======================================================= do{ for(i=0;i<n;i++){ for(j=0;j<n;j++){ if ((dis[i][j] != 0) && (node[i].label == unsolved)) { if(node[i].distance+dis[i][j] < node[i].distance){ node[i].previous=i; node[i].distance = node[i].distance+dis[i][j]; } } } } //====BRISKW TON UNSOLVED NODE ME THN MIN APOSTASI============================================ next=0; min=9999; for(i=0;i<n;i++){ if((node[i].label == unsolved) && (node[i].distance < min ) ){ next=i; } node[next].label=solved; } }while(node[n].label == solved ) ; next =0; i=0; do{ path[i++] = next; next= node[next].previous; printf("%d <--",next); }while(next >=0); }
Directx Δημοσ. 4 Μαρτίου 2012 Δημοσ. 4 Μαρτίου 2012 Δεν προσδιορίζεις ούτε compiler, ούτε λειτουργικό σύστημα κλπ.. Για "bus error" δες εδώ και πράξε ανάλογα. Υ.Γ. Υπόψην επίσης ότι ο κώδικας σου δεν μπορεί να γίνει compile σε C++ Builder λόγο σφάλματος "Out of memory" καθώς το MAX_NODES 999999 θεωρείται υπερβολικό μέγεθος (αν το μειώσεις ο κώδικας εκτελείται αλλά φτάνει σε ένα infinite-loop -??- στο while(node[n].label == solved ); (όπου n = 5). Καλή τύχη.
jimbakl Δημοσ. 4 Μαρτίου 2012 Μέλος Δημοσ. 4 Μαρτίου 2012 Δεν προσδιορίζεις ούτε compiler, ούτε λειτουργικό σύστημα κλπ.. Για "bus error" δες εδώ και πράξε ανάλογα. Υ.Γ. Υπόψην επίσης ότι ο κώδικας σου δεν μπορεί να γίνει compile σε C++ Builder λόγο σφάλματος "Out of memory" καθώς το MAX_NODES 999999 θεωρείται υπερβολικό μέγεθος (αν το μειώσεις ο κώδικας εκτελείται αλλά φτάνει σε ένα infinite-loop -??- στο while(node[n].label == solved ); (όπου n = 5). Καλή τύχη. το κάνω compile στο terminal σε mac os με την εντολή gcc xxx.c -o xxx έβαλα max_nodes 7 αλλά και πάλι. Δεν έχω υπάρχει κάποια εντολή για να κάνω debug βημα βήμα;;
Directx Δημοσ. 4 Μαρτίου 2012 Δημοσ. 4 Μαρτίου 2012 Αν και από MAC OS δεν γνωριζω, από όσο εχω υπόψη μου μάλλον θα πρέπει να δεις το XCODE το επίσημο δηλαδή IDE που προσφέρει η Apple μαζί με το λειτουργικό σύστημα για ανάπτυξη λογισμικού και φυσικά μεταξύ άλλων δυνατοτήτων επιτρέπει και το step debugging στον πηγαίο κώδικα.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα