Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα σας. Έχω ένα πρόβλημα με τον αλγόριθμο του dijkstra για το παρακάτω δίκτυο screenshot20120303at737.png όπου -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);


}


 

Δημοσ.

Δεν προσδιορίζεις ούτε compiler, ούτε λειτουργικό σύστημα κλπ..

 

Για "bus error" δες εδώ και πράξε ανάλογα.

 

Υ.Γ.

Υπόψην επίσης ότι ο κώδικας σου δεν μπορεί να γίνει compile σε C++ Builder λόγο σφάλματος "Out of memory" καθώς το MAX_NODES 999999 θεωρείται υπερβολικό μέγεθος (αν το μειώσεις ο κώδικας εκτελείται αλλά φτάνει σε ένα infinite-loop -??- στο while(node[n].label == solved ); (όπου n = 5).

 

Καλή τύχη.

Δημοσ.

Δεν προσδιορίζεις ούτε 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 βημα βήμα;;

Δημοσ.

Αν και από MAC OS δεν γνωριζω, από όσο εχω υπόψη μου μάλλον θα πρέπει να δεις το XCODE το επίσημο δηλαδή IDE που προσφέρει η Apple μαζί με το λειτουργικό σύστημα για ανάπτυξη λογισμικού και φυσικά μεταξύ άλλων δυνατοτήτων επιτρέπει και το step debugging στον πηγαίο κώδικα.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...