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)的更多相关文章

  1. PTA 7-1 邻接矩阵表示法创建无向图 (20分)

    PTA 7-1 邻接矩阵表示法创建无向图 (20分) 采用邻接矩阵表示法创建无向图G ,依次输出各顶点的度. 输入格式: 输入第一行中给出2个整数i(0<i≤10),j(j≥0),分别为图G的顶 ...

  2. DFS&&BFS

    DFS DFS搜索是按照深度的方向搜索,它类似于树的先根遍历,是树的先根遍历的推广. 1.从图的某个顶点v0出发,首先访问v0, 2.找出刚访问过的顶点的第一个未被访问过的邻接点,然后访问该结点,以该 ...

  3. DFS & BFS

    DFS 深度优先 BFS 广度优先 DFS或者BFS都是在联通区域内遍历节点的方法 用在二叉树上DFS有preOreder,inOrder,postOrder,BFS就是层次遍历. 在二叉树上的节点, ...

  4. 图的建立——邻接矩阵表示(C语言+VC6.0平台)

    图的邻接矩阵表示及其建立(无向图) #include <stdio.h> #include <stdlib.h> typedef char VertexType;        ...

  5. DFS/BFS+思维 HDOJ 5325 Crazy Bobo

    题目传送门 /* 题意:给一个树,节点上有权值,问最多能找出多少个点满足在树上是连通的并且按照权值排序后相邻的点 在树上的路径权值都小于这两个点 DFS/BFS+思维:按照权值的大小,从小的到大的连有 ...

  6. 【DFS/BFS】NYOJ-58-最少步数(迷宫最短路径问题)

    [题目链接:NYOJ-58] 经典的搜索问题,想必这题用广搜的会比较多,所以我首先使的也是广搜,但其实深搜同样也是可以的. 不考虑剪枝的话,两种方法实践消耗相同,但是深搜相比广搜内存低一点. 我想,因 ...

  7. ID(dfs+bfs)-hdu-4127-Flood-it!

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4127 题目意思: 给n*n的方格,每个格子有一种颜色(0~5),每次可以选择一种颜色,使得和左上角相 ...

  8. 基于visual Studio2013解决算法导论之054图的邻接矩阵表示

     题目 图的邻接矩阵表示 解决代码及点评 // 图的邻接矩阵表示.cpp : 定义控制台应用程序的入口点. // #include <iostream> #include <l ...

  9. c语言——单链表分拆——头插法创建链表,尾插法生成链表

    #if 1 #include<stdio.h> #include<stdlib.h> #include<iostream> using namespace std; ...

随机推荐

  1. CentOS 7单用户模式修改root密码

    CentOS 7的单用户模式和6.5稍有不同 把ro改成 "rw init=/sysroot/bin/sh". 完成之后按 "Ctrl+x" chroot /s ...

  2. 自编Ps教程—我的ps图片赞赏

    上篇讲述了主要的ps概念和操作,这里不再讲述了,主要的操作学好了,其它的都简单,下面我会把我闲暇时间天马行空的小作品上穿,以供大家闲暇时间或者工作累了的时候赞赏! 以后还会在这里上传哦!喜欢就收藏吧! ...

  3. SWT中的Tree中 添加右键弹出菜单

    先看一下效果: 如图:在树上单击鼠标右键会弹出 弹出式菜单.做法其实很简单,先做一个树: final TreeViewer treeViewer = new TreeViewer(group, SWT ...

  4. HDu 2830 Matrix Swapping II(dp)

    Problem Description Given an N * M matrix with each entry equal to 0 or 1. We can find some rectangl ...

  5. c#程序内存分配

    c#程序内存分配 进程可使用内存数就是操作系统给进程分配的最大地址,一般的32位操作系统提供给用户地址最大都是3g(操作系统自己保留1g),windows由于商业目的,对于个人用户只提供了2g地址,要 ...

  6. cocos2d-html5 碰撞检測的几种方法

    游戏中的碰撞还是比較多的,比方角色与角色的碰撞,角色与墙壁的碰撞,角色与怪物的碰撞等,都须要 进行碰撞的检測,来触发一定的事件 近期在尝试制作一个小游戏的时候须要用到碰撞检測,然后就查了下资料,并在论 ...

  7. apache2.4.4启用deflate压缩

    今天在看<高性能php应用开发>这本书,说道如何启用mod_deflate: 启用如下模块: LoadModule deflate_module modules/mod_deflate.s ...

  8. 二叉树的建立与遍历(山东理工OJ)

    题目描写叙述 已知一个按先序序列输入的字符序列,如abc,,de,g,,f,,,(当中逗号表示空节点).请建立二叉树并按中序和后序方式遍历二叉树,最后求出叶子节点个数和二叉树深度. 输入 输入一个长度 ...

  9. hdu1500 (排序+单调队列优化 )

    从n根筷子里面, 选择k+8个集合的筷子,每个集合三根筷子, A<=B<=C, 费用是(A-B)^2, 问最小的费用是多少. 将n根筷子排序之后,可以知道A和B的下标一定是连续的. 比如有 ...

  10. iOS Dev (59) 高度自适应的UITextView

    iOS Dev (59) 高度自适应的UITextView 作者:阿锐 地址:http://blog.csdn.net/prevention - 例如以下 _inputTextView 为一个 UIT ...