有向图的邻接矩阵表示法(创建,DFS,BFS)
package shiyan; import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner; public class GraphMartix { class Vertext<AnyType>{
char data;
boolean visit;
public Vertext(char d){
this.data=d;
this.visit=false;
}
} Vertext ver[];
int arcs[][];
int verNumble;
//创建图
Scanner sc=new Scanner(System.in); public void creatGraph(){
System.out.println("请输入顶点个数");
verNumble=sc.nextInt();
ver=new Vertext[verNumble];
arcs=new int[verNumble][verNumble];
for(int i=0;i<verNumble;i++){
for(int j=0;j<verNumble;j++){
arcs[i][j]=0;
}
}
System.out.println("请输入顶点数据");
String point=sc.next();
char p[]=point.toCharArray();
for(int i=0;i<p.length;i++){
ver[i]=new Vertext(p[i]);
}
for(int i=0;i<verNumble;i++){
System.out.println("请输入 所有的以"+ver[i].data+"为弧尾的边上的另一端点顶点");
String apoint=sc.next();
char ap[]=apoint.toCharArray();
int ap_id[]=new int[ap.length]; //存放邻接点下标
if(ap[0]=='*')
ap_id[0]=-1;
else{
for(int x=0;x<ap.length;x++){
int y=0;
while(ver[y].data!=ap[x]&&y<ver.length){
y++;
}
ap_id[x]=y;
}
}
if(ap_id[0]==-1)
continue;
for(int j=0;j<ap_id.length;j++){
arcs[i][ap_id[j]]=1;
}
}
} public void DFS(int v){
ver[v].visit=true;
System.out.println(ver[v].data);
for(int i=0;i<ver.length;i++){
if(arcs[v][i]==1&&ver[i].visit==false)
DFS(i);
}
}
public void BFS(int v){
Queue<Integer> q=new LinkedList<Integer>();
q.add(v);
while(!q.isEmpty()){
v=q.poll();
if(ver[v].visit==false){
ver[v].visit=true;
System.out.println(ver[v].data);
}
for(int i=0;i<ver.length;i++){
if(arcs[v][i]==1&&ver[i].visit==false){
q.add(i);
}
}
}
}
public void du(){
int chu=0;
int ru=0;
for(int i=0;i<ver.length;i++){
for(int j=0;j<ver.length;j++){
if(arcs[i][j]==1)
chu++;
if(arcs[j][i]==1)
ru++;
} System.out.println(ver[i].data+"的度为: "+(chu+ru));
chu=0;
ru=0;
}
} public static void main(String[] args) {
GraphMartix gm=new GraphMartix();
gm.creatGraph();
gm.du();
// gm.DFS(0);
gm.BFS(0); } }
有向图的邻接矩阵表示法(创建,DFS,BFS)的更多相关文章
- PTA 7-1 邻接矩阵表示法创建无向图 (20分)
PTA 7-1 邻接矩阵表示法创建无向图 (20分) 采用邻接矩阵表示法创建无向图G ,依次输出各顶点的度. 输入格式: 输入第一行中给出2个整数i(0<i≤10),j(j≥0),分别为图G的顶 ...
- DFS&&BFS
DFS DFS搜索是按照深度的方向搜索,它类似于树的先根遍历,是树的先根遍历的推广. 1.从图的某个顶点v0出发,首先访问v0, 2.找出刚访问过的顶点的第一个未被访问过的邻接点,然后访问该结点,以该 ...
- DFS & BFS
DFS 深度优先 BFS 广度优先 DFS或者BFS都是在联通区域内遍历节点的方法 用在二叉树上DFS有preOreder,inOrder,postOrder,BFS就是层次遍历. 在二叉树上的节点, ...
- 图的建立——邻接矩阵表示(C语言+VC6.0平台)
图的邻接矩阵表示及其建立(无向图) #include <stdio.h> #include <stdlib.h> typedef char VertexType; ...
- DFS/BFS+思维 HDOJ 5325 Crazy Bobo
题目传送门 /* 题意:给一个树,节点上有权值,问最多能找出多少个点满足在树上是连通的并且按照权值排序后相邻的点 在树上的路径权值都小于这两个点 DFS/BFS+思维:按照权值的大小,从小的到大的连有 ...
- 【DFS/BFS】NYOJ-58-最少步数(迷宫最短路径问题)
[题目链接:NYOJ-58] 经典的搜索问题,想必这题用广搜的会比较多,所以我首先使的也是广搜,但其实深搜同样也是可以的. 不考虑剪枝的话,两种方法实践消耗相同,但是深搜相比广搜内存低一点. 我想,因 ...
- ID(dfs+bfs)-hdu-4127-Flood-it!
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4127 题目意思: 给n*n的方格,每个格子有一种颜色(0~5),每次可以选择一种颜色,使得和左上角相 ...
- 基于visual Studio2013解决算法导论之054图的邻接矩阵表示
题目 图的邻接矩阵表示 解决代码及点评 // 图的邻接矩阵表示.cpp : 定义控制台应用程序的入口点. // #include <iostream> #include <l ...
- c语言——单链表分拆——头插法创建链表,尾插法生成链表
#if 1 #include<stdio.h> #include<stdlib.h> #include<iostream> using namespace std; ...
随机推荐
- 浅谈OCR之Onenote 2010
原文:浅谈OCR之Onenote 2010 上一次我们讨论了Tesseract OCR引擎的用法,作为一款老牌的OCR引擎,目前已经开源,最新版本3.0中更是加入了中文OCR功能,再加上Google的 ...
- zoj2314(有上下界的网络流)
传送门:Reactor Cooling 题意:给n个点,及m根pipe,每根pipe用来流躺液体的,单向的,每时每刻每根pipe流进来的物质要等于流出去的物质,要使得m条pipe组成一个循环体,里面流 ...
- 服务器编程入门(10)TCP回射服务器实现 - 并发
问题聚焦: 在前面我们大概浏览了一下服务器编程需要掌握的一些知识和技术,以及架构思想. 实践,才是检验真理的唯一标准..从这节起我们将在这些技术的基础上,一步步实现以及完善一个服 ...
- 京东商城招聘自动调价系统架构师 T4级别
岗位级别:T4 岗位职责: 1.负责自动调价系统的架构设计 2.负责自动调价的预测.相关性算法设计 3.核心代码编写,代码review 任职要求: 1.熟悉数据挖掘.机器学习理论和算法 2.熟悉海量数 ...
- iOS_25彩票_幸运转盘
终于效果图: 各个view的关系图: 背景圆盘(须要扣图处理)LuckyBaseBackground.png 盖在背景圆盘上面的转盘 LuckyRotateWheel.png watermark/2/ ...
- ARMv8 Linux内核异常处理过程分析
NOTE:为了方便大家阅读,制作了PDF版文档.下载请猛戳这里 老样子,为了赚点积分下载其它人的文件,下载以上资料须要资源分2分. 假设没有积分请留言全部文档,留下邮箱就可以. 看了Linaro提供的 ...
- 全栈JavaScript之路(十八)HTML5 自己定义数据属性
HTML5 规范规定,用户能够为元素 自己定义非标准属性, 可是要加入 data- 前缀. 目的是为元素提供与页面渲染无关的信息.或者语义信息.这些属性名能够任意加入,仅仅要带上前缀 data- 开头 ...
- Lua 与C 交换 第一篇
编译 windows上编译lua源代码 cl /MD /O2 /W3 /c /DLUA_BUILD_AS_DLL *.c del *.o ren lua.obj lua.o ren luac.obj ...
- Qt--将Qt 动态链接生成的exe及依赖dll打包方法
Qt静态编译链接生成的exe文件,不需依赖dll,可以独立运行,发布很方便. 但绝大多数用的都是Qt开源版本,如果用静态链接,会有些限制. 方法之一,就是用动态编译,然后把exe和需要的dll整合成一 ...
- c#和UDP SOCKET广播
server: Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,ProtocolType.Udp); // ...