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. Ubuntu9.04更新源

    1.sudo gedit /etc/apt/sources.list 编辑你的源列表,加入以下列表中你认为适合你的,拷贝到你的列表中,然后保存列表. Archive.ubuntu.com更新serve ...

  2. hdu1428之dfs+spfa

    漫步校园 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  3. zoj3795 Grouping --- 良好的沟通,寻找最长的公路

    给定一个图,为了保持图分裂至少成多个集合的集合内可以使点没有直接或间接的关系. 首先,题意可以得到图中可能含有环.该环的内侧是肯定是要被拆卸. 图点降低建DAG画画,能想象..图从零点渗透深入,在点中 ...

  4. 多个UpdatePanel控件相互引发刷新的使用

    原文:多个UpdatePanel控件相互引发刷新的使用 ScriptManager和UpdatePanel控件联合使用可以实现页面异步局部更新的效果.其中的UpdatePanel就是设置页面中异 步局 ...

  5. cocostudio内存释放

    在使用cocostudio时,在释放内存时能够这样做: 在onExit()方法里加入例如以下: void LoadLayer::onExit() { // 释放本对象自己 removeFromPare ...

  6. VBoxGuestAdditions.iso下载地址

    http://download.virtualbox.org/virtualbox/4.1.2/VBoxGuestAdditions_4.1.2.iso 其它版本号可依次判断..

  7. 一起来开发Android的天气软件(四)——使用Gson解析数据

    离上一篇文章过去才4.5天,我们赶紧趁热打铁继续完毕该系列的天气软件的开发. 承接上一章的内容使用Volley实现网络的通信.返回给我们的是这一串Json数据{"weatherinfo&qu ...

  8. c#程序内存分配

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

  9. 设计模式学习一:strategyPattern

    #ifndef STRATEGYPATTERN_H_#define STRATEGYPATTERN_H_#include<iostream>using namespace std; //策 ...

  10. embedded dylibs/frameworks are only supported on iOS 8.0 and later 错误解决

    ld: warning: embedded dylibs/frameworks only run on iOS 8 or later ld: embedded dylibs/frameworks ar ...