Graf- İki nokta arası yol bulma (Veri Yapıları)

#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#define N 5
#define true 1
#define false 0

void findPath(int from, int to);
void printPath(void);

int graph[N][N];
int path[N];
int visited[N];
int indeks = 0;

int main()
{
srand((unsigned int)time(NULL));
int from, to;
printf(" %dx%d lik graf uretildi\n\n",N,N);

//random komsuluk matrısı uretımı
for (int i = 0; i < N; i++){
printf("\t");
for (int j = 0; j < N; j++) {
graph[i][j] = rand() % 2;
printf("%d ", graph[i][j]);
}
printf("\n");
}
printf("\n");

printf("Baslangic dugumu [0,%d]: ", N - 1);
scanf("%d", &from);

printf("Bıtıs dugumu[0,%d]: ", N - 1);
scanf("%d", &to);

// baslangicta tum dugumler unvisited
memset(visited, 0, sizeof(visited));

printf("\n[%d-%d] arasi tum yollar:\n",from,to);
findPath(from, to);
return 0;

}
void findPath(int from, int to)
{
visited[from] = true;
path[indeks] = from;
indeks++;

if (from == to)
printPath();
else{
int i;
for (i = 0; i < N; i++){
if (visited[i] == false && graph[from][i]==true)
findPath(i, to);
}
}
visited[from] = false;
indeks--;
}

void printPath()
{
int i;
for (i = 0; i < indeks; i++)
printf("%d ", path[i]);
printf("\n");
}

(kaynak)

Yorumlar

Popüler Yayınlar