图的存储—数组
来源:互联网 发布:http index.php 编辑:程序博客网 时间:2024/06/09 16:16
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdlib.h>
#include <string.h>
#define N 5
typedef struct _node_
{
int vertex;
struct _node_ *next;
} linknode, *linklist;
{
int vertex;
struct _node_ *next;
} linknode, *linklist;
typedef struct
{
linklist front, rear;
} linkqueue;
{
linklist front, rear;
} linkqueue;
linkqueue *CreateEmptyQueue()
{
linkqueue *lq;
{
linkqueue *lq;
lq = (linkqueue *)malloc(sizeof(linkqueue));
lq->front = lq->rear = (linklist)malloc(sizeof(linknode));
lq->front->next = NULL;
lq->front = lq->rear = (linklist)malloc(sizeof(linknode));
lq->front->next = NULL;
return lq;
}
}
int EmptyQueue(linkqueue *lq)
{
return (lq->front == lq->rear);
}
{
return (lq->front == lq->rear);
}
void EnQueue(linkqueue *lq, int vertex)
{
lq->rear->next = (linklist)malloc(sizeof(linknode));
lq->rear = lq->rear->next;
lq->rear->vertex = vertex;
lq->rear->next = NULL;
{
lq->rear->next = (linklist)malloc(sizeof(linknode));
lq->rear = lq->rear->next;
lq->rear->vertex = vertex;
lq->rear->next = NULL;
return;
}
}
int DeQueue(linkqueue *lq)
{
linklist q;
{
linklist q;
q = lq->front;
lq->front = q->next;
free(q);
lq->front = q->next;
free(q);
return lq->front->vertex;
}
}
int FirstAdj(int array[][N], int u)
{
int j;
{
int j;
for (j=0; j<N; j++)
{
if (array[u][j] == 1) return j;
}
{
if (array[u][j] == 1) return j;
}
return 0;
}
}
int NextAdj(int array[][N], int u, int v)
{
int j;
{
int j;
for (j=v+1; j<N; j++)
{
if (array[u][j] == 1) return j;
}
{
if (array[u][j] == 1) return j;
}
return -1;
}
}
//深度优先算法实现
void DFS(int array[][N], int s[N], int v)
{
int u;
{
int u;
printf("V%d ", v);
s[v] = 1;
u = FirstAdj(array, v);
while (u >= 0)
{
if (s[u] == 0) DFS(array, s, u);
u = NextAdj(array, v, u);
}
s[v] = 1;
u = FirstAdj(array, v);
while (u >= 0)
{
if (s[u] == 0) DFS(array, s, u);
u = NextAdj(array, v, u);
}
return;
}
}
//广度优先算法实现
void BFS(int array[][N], int s[N], int v)
{
int u;
linkqueue *lq;
{
int u;
linkqueue *lq;
lq = CreateEmptyQueue();
printf("V%d ", v);
s[v] = 1;
EnQueue(lq, v);
printf("V%d ", v);
s[v] = 1;
EnQueue(lq, v);
while ( ! EmptyQueue(lq) )
{
v = DeQueue(lq);
u = FirstAdj(array, v);
while (u >= 0)
{
if (s[u] == 0)
{
printf("V%d ", u);
s[u] = 1;
EnQueue(lq, u);
}
u = NextAdj(array, v, u);
}
}
{
v = DeQueue(lq);
u = FirstAdj(array, v);
while (u >= 0)
{
if (s[u] == 0)
{
printf("V%d ", u);
s[u] = 1;
EnQueue(lq, u);
}
u = NextAdj(array, v, u);
}
}
return;
}
}
int main()
{
int i, j, s[N] = {0};
int array[N][N] = {{0}};
while (scanf("%d,%d", &i, &j) == 2)
{
array[i][j] = array[j][i] = 1;
}
{
array[i][j] = array[j][i] = 1;
}
for (i=0; i<N; i++)
{
printf("V%d : ", i);
for (j=0; j<N; j++)
{
if (array[i][j] == 1) printf("V%d ", j);
}
printf("\n");
}
{
printf("V%d : ", i);
for (j=0; j<N; j++)
{
if (array[i][j] == 1) printf("V%d ", j);
}
printf("\n");
}
printf("DFS : ");
DFS(array, s, 2);
printf("\n");
DFS(array, s, 2);
printf("\n");
bzero(s, sizeof(s));
printf("BFS : ");
BFS(array, s, 2);
printf("\n");
printf("BFS : ");
BFS(array, s, 2);
printf("\n");
return 0;
}
}
- 图的存储—数组
- 图的数组(邻接矩阵)存储
- 数据结构 - 图的数组存储
- 图的存储形式——邻接矩阵(数组)
- 图的数组(邻接矩阵)存储结构
- 图的数组(邻接矩阵)存储实现
- 数组的存储
- 连续存储的数组
- 数组的顺序存储
- 存储对象的数组
- 数组的存储方式
- 存储指针的数组
- 二维数组的元素用一维数组存储
- 连续存储数组数组的算法演示
- 数组的顺序存储表示
- 连续存储数组的算法
- 数组字符串常量的存储
- java 数组的存储结构
- 栈的实例—表达式求值
- 队列的实现—由数组实现
- 队列的实现—由链表实现
- 利用队列和栈实现球钟问题
- 树的存储与遍历
- 图的存储—数组
- 图的存储—链表
- 利用图求最短路径
- 快速排序实现
- 学习使用linux下tags文件
- 标准IO的函数分析
- getopt函数的使用
- 用文件IO操作实现ls命令
- 基于UDP套接字的局域网聊天室