@Shalom masz rację, mogłem jeszcze poszukać na internecie, ale gdy na początku nie mogłem znaleźć żadnego,przydatnego dla mnie programu w C to zrezygnowałem, więc teraz w pierwszym momencie nawet o tym nie pomyślałem.
@_13th_Dragon z chęcią, bym to zrobił, ale niestety nie mam żadnego pojęcia jak to zrobić, więc próbowałem przerobić mój program z użyciem tego wyżej, który nadesłał mi Shalom.
Ogólnie moja koncepcja wygląda,tak aby na razie zrobić ten program, aby działał, a potem go "udoskonalić" zagłębić się w niego, w pełni zrozumieć.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <limits.h>
#define MAX 100
#define V 2
struct graf
{
int city1;
int city2;
int dist; // distance
};
int minDistance(int dist[], bool sptSet[])
{
int min = INT_MAX, min_index;
for (int v = 0; v < V; v++)
if (sptSet[v] == false && dist[v] <= min)
min = dist[v], min_index = v;
return min_index;
}
int printSolution(int dist[], int n)
{
printf("Vertex Distance from Source\n");
for (int i = 0; i < V; i++)
printf("%d \t\t %d\n", i, dist[i]);
}
void dijkstra(int graph[V][V], int src)
{
int dist[V];
bool sptSet[V];
for (int i = 0; i < V; i++)
dist[i] = INT_MAX, sptSet[i] = false;
dist[src] = 0;
for (int count = 0; count < V-1; count++)
{
int u = minDistance(dist, sptSet);
sptSet[u] = true;
for (int v = 0; v < V; v++)
if (!sptSet[v] && graph[u][v] && dist[u] != INT_MAX
&& dist[u]+graph[u][v] < dist[v])
dist[v] = dist[u] + graph[u][v];
}
printSolution(dist, V);
}
main()
{
int wmax=0;
struct graf Graf[50];
FILE *plik = fopen("karol.txt", "r");
for(int i=0;i<2;i++)
{
fscanf(plik, "%d", &Graf[i].city1);
fscanf(plik, "%d", &Graf[i].city2);
fscanf(plik, "%d", &Graf[i].dist);
}
for(int i=0;i<2;i++)
{
printf("%d ",Graf[i].city1);
printf("%d ",Graf[i].city2);
printf("%d ",Graf[i].dist);
printf("\n");
}
char matrix[MAX][MAX]; //macierz sąsiedztwa
int distance[MAX][MAX]; // macierz wag
for(int i=0;i<MAX;i++) {
for(int j=0;j<MAX;j++){
matrix[i][j]=0;
distance[i][j]=0;
} }
for(int k = 0; k < 2; k++)
{
if(Graf[k].city1> wmax)
{
wmax=Graf[k].city1;
}
else
{
wmax=wmax;
}
if(Graf[k].city2> wmax)
{
wmax=Graf[k].city2;
}
else
{
wmax=wmax;
}
matrix[Graf[k].city1-1][Graf[k].city2-1] = 1;
distance[(Graf[k].city1)-1][(Graf[k].city2)-1]=Graf[k].dist;
}
printf("%d ",dijkstra(distance,0);
}
Po uruchomieniu programu, wywala taki błąd:
Błąd jaki wywala : cannot convert 'int ()[100]' to 'int ()[2]' for argument '1' to 'void dijkstra(int (*)[2], int)'
Z góry dziękuję, za ponowną pomoc i przepraszam, jeżeli to jakieś upierdliwe pytanie, lub co gorsza jakiś kardynalny błąd : )