以下是常见的几种图算法的C语言实例:
- DFS遍历
// DFS遍历
void DFS(int node, int *visited, int **graph, int nodeNum){
visited[node] = 1;
printf("%d ", node);
for(int i = 0; i < nodeNum; i++){
if(graph[node][i] == 1 && visited[i] == 0){
DFS(i, visited, graph, nodeNum);
}
}
}
- BFS遍历
// BFS遍历
void BFS(int node, int *visited, int **graph, int nodeNum){
int queue[nodeNum], front = -1, rear = -1;
visited[node] = 1;
queue[++rear] = node;
while(front < rear){
int cur = queue[++front];
printf("%d ", cur);
for(int i = 0; i < nodeNum; i++){
if(graph[cur][i] == 1 && visited[i] == 0){
visited[i] = 1;
queue[++rear] = i;
}
}
}
}
- 最短路径算法--Dijkstra算法
#define Max 0x3f3f3f3f
#define N 100
void Dijkstra(int start, int *distance, int **graph, int n){
int visited[n];
memset(visited, 0, sizeof(visited));
distance[start] = 0;
for(int i = 0; i < n; i++){
int minDist = Max, minNode = 0;
for(int j = 0; j < n; j++){
if(visited[j] == 0 && distance[j] < minDist){
minDist = distance[j];
minNode = j;
}
}
visited[minNode] = 1;
for(int k = 0; k < n; k++){
if(visited[k] == 0 && graph[minNode][k] != Max){
distance[k] = min(distance[k], distance[minNode] + graph[minNode][k]);
}
}
}
}
- 最小生成树算法--Prim算法
#define Max 0x3f3f3f3f
#define N 100
void Prim(int start, int *lowcost, int **graph, int n){
int visited[n];
memset(visited, 0, sizeof(visited));
lowcost[start] = 0;
for(int i = 0; i < n; i++){
int minCost = Max, minNode = 0;
for(int j = 0; j < n; j++){
if(visited[j] == 0 && lowcost[j] < minCost){
minCost = lowcost[j];
minNode = j;
}
}
visited[minNode] = 1;
for(int k = 0; k < n; k++){
if(visited[k] == 0 && graph[minNode][k] < lowcost[k]){
lowcost[k] = graph[minNode][k];
}
}
}
}
希望这些C语言实例对您有帮助。
1条新消息