您的位置:首页 > 理论基础 > 数据结构算法

数据结构之深度优先与广度优先算法

2017-07-25 14:09 162 查看
图:



邻届表表示图:



代码:

package com.tu;

/**
* Created by lcc on 2017/7/25.
*/
public class DFSyuBFS {
public static void main(String[] args) {
DFSyuBFS dFSyuBFS = new DFSyuBFS ();
Linjiebiao linjiebiao = dfs.getShuJu();
dFSyuBFS .Dfs(linjiebiao,2 );
System.out.println("--------");

dFSyuBFS .bfs(linjiebiao,2 );

}

int[] visited = new int[100];

void bfs(Linjiebiao linjiebiao, int v) {
int changdu =linjiebiao.n;
ArcNode p;
int w;
int [] queue =new int [changdu];
int front =0; int rear =0;
int [] visistedqueue  = new int[changdu];

System.out.println(v);
visistedqueue[v] =1 ;
rear = (rear+1)%changdu;
queue[rear] =v;
while (front !=rear) {
front =(front+1)%changdu;
w=queue[front];
p=linjiebiao.adjlist[w].fistarc;
while (p!=null) {
if(visistedqueue[p.adjvex] ==0) {
System.out.println(p.adjvex);
visistedqueue[p.adjvex] =1;
rear =(rear+1)%changdu;
queue[rear] =p.adjvex;
}
p=p.nextarc;
}
}

}

void Dfs(Linjiebiao linjiebiao, int i) {
ArcNode p;
int w;
visited[i] = 1;
System.out.println(i);
p = linjiebiao.adjlist[i].fistarc;
while (p != null) {
w = p.adjvex;
if (visited[w] == 0) {
Dfs(linjiebiao, w);
}
p = p.nextarc;
}
}
//临界表表示图
Linjiebiao getShuJu() {
Linjiebiao linjiebiao = new Linjiebiao();
linjiebiao.e = 7;
linjiebiao.n = 5;
Vnode vnode = new Vnode();
linjiebiao.adjlist[0] = vnode;
vnode.data = "1";
ArcNode arcNode = new ArcNode();
ArcNode arcNode2 = new ArcNode();
ArcNode arcNode3 = new ArcNode();
vnode.fistarc = arcNode;
arcNode.adjvex = 1;
arcNode.nextarc = arcNode2;
arcNode2.adjvex = 3;
arcNode2.nextarc = arcNode3;
arcNode3.adjvex = 4;
arcNode3.nextarc = null;

Vnode vnode11 = new Vnode();
linjiebiao.adjlist[1] = vnode11;
vnode11.data = "2";
ArcNode arcNode11 = new ArcNode();
ArcNode arcNode211 = new ArcNode();
ArcNode arcNode311 = new ArcNode();
vnode11.fistarc = arcNode11;
arcNode11.adjvex = 0;
arcNode11.nextarc = arcNode211;
arcNode211.adjvex = 2;
arcNode211.nextarc = arcNode311;
arcNode311.adjvex = 3;
arcNode311.nextarc = null;

Vnode vnode22 = new Vnode();
linjiebiao.adjlist[2] = vnode22;
vnode22.data = "3";
ArcNode arcNode22 = new ArcNode();
ArcNode arcNode222 = new ArcNode();
ArcNode arcNode322 = new ArcNode();
vnode22.fistarc = arcNode22;
arcNode22.adjvex = 1;
arcNode22.nextarc = arcNode222;
arcNode222.adjvex = 3;
arcNode222.nextarc = arcNode322;
arcNode322.adjvex = 4;
arcNode322.nextarc = null;

Vnode vnode33 = new Vnode();
linjiebiao.adjlist[3] = vnode33;
vnode22.data = "4";
ArcNode arcNode33 = new ArcNode();
ArcNode arcNode233 = new ArcNode();
ArcNode arcNode333 = new ArcNode();
ArcNode arcNode433 = new ArcNode();
vnode33.fistarc = arcNode33;
arcNode33.adjvex = 0;
arcNode33.nextarc = arcNode233;
arcNode233.adjvex = 1;
arcNode233.nextarc = arcNode333;
arcNode333.adjvex = 2;
arcNode333.nextarc = arcNode433;
arcNode433.adjvex = 4;
arcNode433.nextarc = null;

Vnode vnode44 = new Vnode();
linjiebiao.adjlist[4] = vnode44;
vnode44.data = "5";
ArcNode arcNode44 = new ArcNode();
ArcNode arcNode244 = new ArcNode();
ArcNode arcNode344 = new ArcNode();
vnode44.fistarc = arcNode44;
arcNode44.adjvex = 0;
arcNode44.nextarc = arcNode244;
arcNode244.adjvex = 2;
arcNode244.nextarc = arcNode344;
arcNode344.adjvex = 3;
arcNode344.nextarc = null;
return linjiebiao;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构 算法