diff --git a/SBCE/Breadthfirst.c b/SBCE/Breadthfirst.c new file mode 100644 index 00000000..91160c5c --- /dev/null +++ b/SBCE/Breadthfirst.c @@ -0,0 +1,137 @@ +#include +#include +#include + +#define MAX 5 + +struct Vertex { + char label; + bool visited; +}; + +//queue variables + +int queue[MAX]; +int rear = -1; +int front = 0; +int queueItemCount = 0; + +//graph variables + +//array of vertices +struct Vertex* lstVertices[MAX]; + +//adjacency matrix +int adjMatrix[MAX][MAX]; + +//vertex count +int vertexCount = 0; + +//queue functions + +void insert(int data) { + queue[++rear] = data; + queueItemCount++; +} + +int removeData() { + queueItemCount--; + return queue[front++]; +} + +bool isQueueEmpty() { + return queueItemCount == 0; +} + +//graph functions + +//add vertex to the vertex list +void addVertex(char label) { + struct Vertex* vertex = (struct Vertex*) malloc(sizeof(struct Vertex)); + vertex->label = label; + vertex->visited = false; + lstVertices[vertexCount++] = vertex; +} + +//add edge to edge array +void addEdge(int start,int end) { + adjMatrix[start][end] = 1; + adjMatrix[end][start] = 1; +} + +//display the vertex +void displayVertex(int vertexIndex) { + printf("%c ",lstVertices[vertexIndex]->label); +} + +//get the adjacent unvisited vertex +int getAdjUnvisitedVertex(int vertexIndex) { + int i; + + for(i = 0; ivisited == false) + return i; + } + + return -1; +} + +void breadthFirstSearch() { + int i; + + //mark first node as visited + lstVertices[0]->visited = true; + + //display the vertex + displayVertex(0); + + //insert vertex index in queue + insert(0); + int unvisitedVertex; + + while(!isQueueEmpty()) { + //get the unvisited vertex of vertex which is at front of the queue + int tempVertex = removeData(); + + //no adjacent vertex found + while((unvisitedVertex = getAdjUnvisitedVertex(tempVertex)) != -1) { + lstVertices[unvisitedVertex]->visited = true; + displayVertex(unvisitedVertex); + insert(unvisitedVertex); + } + + } + + //queue is empty, search is complete, reset the visited flag + for(i = 0;ivisited = false; + } +} + +int main() { + int i, j; + + for(i = 0; i