PDA

View Full Version : الگوریتم Dijkstra



rightsum
جمعه 12 شهریور 1389, 20:17 عصر
سلام
من این الگوریتم رو پیاده سازی کردم ولی حلقه دومش نمی دونم چرا بی نهایت میشه :متعجب:
فکر کنم مشکل تو شرط هاست + در مورد پیاده سازیم هم اگه امکانش هست یه نظر بدید که آیا از نظر منتطقی هم درست هست یا نه ؟!


#include <iostream>
#include <conio.h>

using namespace std ;

int dijkstra (int** matrix , int initial , int terminal , int count){
int length [count];
memset(length,99999,sizeof(length));
length[initial] = 0;
int visited [count];
memset(visited,0,sizeof(visited));
int i , j ; // loop
int minimum , current;
while (!visited [terminal]){
minimum = 99999 ;
// Calculating minimum
for(i=0;i<count;i++){
if(length[i] < minimum && !visited[i]){
minimum = length[i];
current = i ;
}
}

if(minimum == 99999)
break; // All the remained nodes has not any way to access to initial node
visited[current] = 1; // Visiting current node
// Calculating neighbor nodes distance
for(i=0;i<count;i++){
if(matrix[current][i] != 0){
int temp = minimum + matrix[current][i];
if(temp < length[i])
length[i] = temp;
}
}
}
return length [terminal];
}

int main (){
int matrix [5][5] = {
0,50,0,64,0,//0
0,0,0,70,0,//1
0,0,0,0,0,//2
0,0,31,0,19,//3
0,0,26,0,0,//4
};
cout << dijkstra (reinterpret_cast<int**>(matrix),0,4,5);
getch();
return 0;
}

یه مشکل دیگه هم موقع وارد کردن ماتریس داشتم یعنی وقتی به صورت زیر تابع رو call کردم ارور داد :

cout << dijkstra (matrix,0,4,5);
که اینطوری درست شد :

cout << dijkstra (reinterpret_cast<int**>(matrix),0,4,5);
اگه در این مورد هم راهنماییم کنید ممنون میشم :لبخند: