java有向图的邻接矩阵算法_图算法(邻接矩阵)

欧拉路径(u,v)是否存在:

对于连通无向图,u,v 顶点的度均为奇数,其他顶点的度均为偶数;

对于强连通有向图,其他顶点的出度==入度,u:出度==入度+1,v:入度==出度+1;

欧拉回路是否存在:

对于连通无向图,所有顶点的度均为偶数;

对于强连通有向图,所有顶点的出度==入度;

计算顶点 v 的度:

int graphDegree(graph* g, int v)

{

int d = 0;

for (int i = 0; i < g->v; ++i)

if (g->adj[v][i] != 0) ++d;

return d;

}

bfs(邻接矩阵):

int d[100];//记录 s 到各个顶点的距离

int num = 0;

int pi[100]; //记录前驱结点

void bfs(graph* g, int s)

{

for (int i = 0; i < g->v; ++i) d[i] = -1;

int v;

queue q;

q.push(s); d[s] = num++; pi[s] = -1;

while (!q.empty()){

v = q.front(); q.pop();

for (int i = 0; i < g->v; ++i)

if (g->adj[v][i] != 0 && d[i] == -1){

q.push(i); d[i] = num; pi[i] = v;

}

++num;

}

}

dfs(邻接矩阵):

//dfs,深度优先搜索

int dd[100];//记录顶点的发现时间,需初始化为全 -1

int fd[100];//记录顶点的完成时间

int tm = 0;

int pid[100];//记录前驱结点

void dfsVisit(graph* g, int v)

{

dd[v] = ++tm;

for (int i = 0; i < g->v; ++i){

if (g->adj[v][i] == 1 && dd[i] == -1){

pid[i] = v;

dfsVisit(g, i);

}

}

fd[v] = ++tm;

}

void dfs(graph* g)

{

for (int i = 0; i < g->v; ++i) dd[i] = -1;

for (int i = 0; i < g->v; ++i)

if (dd[i] == -1) dfsVisit(g, i);

}

拓扑排序:DFS遍历后,将将顶点按照完成时间从大到小排序,所得序列,即为所有。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值