Hello,
I have a problem with doing my programming homework. I am probably completely lost in everything about linked lists and stuff like that...
Teacher said it should be easy, but I don't understand the basics I think, so if you would please tell me how to search the graph that is created in the code with DFS I would be really grateful.
It should search the graph from startNodeId to endNodeId.
Don't mind the notes in the text
Code:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define NODE_COUNT 20
#define NEIGHBOURS_SIZE 7
/***************************************************
Implementace grafu
funkce createGraph vytváří graf, ve kterém se má hledat
funkce destroyGraph graf uklidí z paměti
****************************************************/
typedef struct TNODE{
int mId; //identifikace uzlu
int mNeighbourIds[NEIGHBOURS_SIZE]; //id sousedu
} TNode;
int randomNodeId(){
int i;
i = rand();
i %= NODE_COUNT;
return i;
}
void createGraph(TNode ** nodes){
//init
for(int i = 0; i < NODE_COUNT; i++){
TNode * newNode;
newNode = (TNode*)malloc(sizeof(TNode));
newNode -> mId = i;
for(int j = 0; j < NEIGHBOURS_SIZE; j++){
newNode -> mNeighbourIds[j] = -1; //-1 rika ze ta pozice je volna, az v tom budes hledat, resp. na pozicich [0] a [1] bude neco > -1, tak to ukazuje na dva sousedy, ten zbytek neukazuje nikam
}
nodes[i] = newNode;
}
//create edges
nodes[0] -> mNeighbourIds[0] = 7;
nodes[0] -> mNeighbourIds[1] = 2;
nodes[0] -> mNeighbourIds[2] = 10;
nodes[0] -> mNeighbourIds[3] = 11;
nodes[0] -> mNeighbourIds[4] = 18;
nodes[1] -> mNeighbourIds[0] = 8;
nodes[1] -> mNeighbourIds[1] = 15;
nodes[1] -> mNeighbourIds[2] = 11;
nodes[1] -> mNeighbourIds[3] = 9;
nodes[2] -> mNeighbourIds[0] = 0;
nodes[2] -> mNeighbourIds[1] = 14;
nodes[2] -> mNeighbourIds[2] = 8;
nodes[3] -> mNeighbourIds[0] = 9;
nodes[3] -> mNeighbourIds[1] = 12;
nodes[4] -> mNeighbourIds[0] = 5;
nodes[4] -> mNeighbourIds[1] = 17;
nodes[4] -> mNeighbourIds[2] = 13;
nodes[5] -> mNeighbourIds[0] = 4;
nodes[5] -> mNeighbourIds[1] = 18;
nodes[6] -> mNeighbourIds[0] = 17;
nodes[6] -> mNeighbourIds[1] = 12;
nodes[7] -> mNeighbourIds[0] = 0;
nodes[7] -> mNeighbourIds[1] = 15;
nodes[7] -> mNeighbourIds[2] = 14;
nodes[8] -> mNeighbourIds[0] = 1;
nodes[8] -> mNeighbourIds[1] = 2;
nodes[8] -> mNeighbourIds[2] = 14;
nodes[9] -> mNeighbourIds[0] = 3;
nodes[9] -> mNeighbourIds[1] = 1;
nodes[10] -> mNeighbourIds[0] = 0;
nodes[10] -> mNeighbourIds[1] = 15;
nodes[11] -> mNeighbourIds[0] = 0;
nodes[11] -> mNeighbourIds[1] = 1;
nodes[11] -> mNeighbourIds[2] = 16;
nodes[12] -> mNeighbourIds[0] = 3;
nodes[12] -> mNeighbourIds[1] = 13;
nodes[12] -> mNeighbourIds[2] = 6;
nodes[13] -> mNeighbourIds[0] = 4;
nodes[13] -> mNeighbourIds[1] = 12;
nodes[14] -> mNeighbourIds[0] = 7;
nodes[14] -> mNeighbourIds[1] = 8;
nodes[14] -> mNeighbourIds[2] = 2;
nodes[15] -> mNeighbourIds[0] = 1;
nodes[15] -> mNeighbourIds[1] = 10;
nodes[15] -> mNeighbourIds[2] = 7;
nodes[16] -> mNeighbourIds[0] = 11;
nodes[16] -> mNeighbourIds[1] = 19;
nodes[17] -> mNeighbourIds[0] = 4;
nodes[17] -> mNeighbourIds[1] = 6;
nodes[18] -> mNeighbourIds[0] = 0;
nodes[18] -> mNeighbourIds[1] = 5;
nodes[19] -> mNeighbourIds[0] = 16;
}
void destroyGraph(TNode ** nodes){
for(int i = 0; i < NODE_COUNT; i++){
free(nodes[i]);
}
}
int main(){
srand((unsigned)time(NULL));
TNode * map[NODE_COUNT]; //staticky pole ukazatelu na TNode
int startNodeId = randomNodeId();
int endNodeId = randomNodeId();
createGraph(map);
//projdi pomoci bfs a dfs graf ze startNodeId (map[startNodeId]) do endNodeId
//pokud by ses chtel jo vytahnout muzes k tomu udelat i rekonstrukci cesty
//neni to ale nutny, staci kdyz to dojde do cile tak jak ma
destroyGraph(map);
return 0;
}