C# 图结构操作
仿造<<Java常用算法手册>>里面对的算法,使用C#实现了一遍. 理论知识我就不讲解了,在这本书里面已经写的非常完美!
代码如何下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 图结构
{
public class GraphMatrix
{
public static int MaxNum = 4; //最大顶点
public static int MaxValue = 65535; //最大权值
public char[] Vertex = new char[MaxNum]; //最多的顶点
public int GraphType; //图类型0 无向图,1 有向图
public int VertexNum; //顶点个数
public int EdgeNum; //边的个数
public int[][] EdgeWeight = new int[MaxNum][]; //每条边的权值
int[] isTrav = new int[MaxNum]; //是否已经遍历过该顶点 public GraphMatrix()
{
for (int i = 0; i < EdgeWeight.Length; i++)
{
EdgeWeight[i] = new int[MaxNum];
}
} //清空图
public void ClearGraph()
{
for (int i = 0; i < this.VertexNum; i++)
{
for (int j = 0; j < this.VertexNum; j++)
{
this.EdgeWeight[i][j] = GraphMatrix.MaxValue;
}
}
} //输出图的关系
public void OutGraph()
{
Console.WriteLine("\n图顶点的关系");
Console.Write(" ");
for (int i = 0; i < VertexNum; i++)
{
Console.Write(Vertex[i]+" ");
} Console.WriteLine(); for (int i = 0; i < VertexNum; i++)
{
Console.Write(Vertex[i] + " "); for (int j = 0; j < VertexNum; j++)
{
if (EdgeWeight[i][j] == GraphMatrix.MaxValue)
Console.Write("Z ");
else
Console.Write(EdgeWeight[i][j] + " ");
} Console.WriteLine();
}
} //遍历图
public void DeepTraGraph()
{
for (int i = 0; i < VertexNum; i++)
{
this.isTrav[i] = 0;
} Console.Write("深度优先遍历节点: ");
for (int i = 0; i < VertexNum; i++)
{
if (isTrav[i] == 0)
{
DeepTraOne(i);
}
} Console.WriteLine();
} //深度优先法
protected void DeepTraOne(int n)
{
isTrav[n] = 1;
Console.Write(Vertex[n]); //遍历该节点是否跟其他节点有关联
for (int i = 0; i < VertexNum; i++)
{
if(EdgeWeight[n][i] != GraphMatrix.MaxValue && isTrav[n] == 0)
{
DeepTraOne(i);
}
}
} } }
控制台代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 图结构
{
class Program
{
static void Main(string[] args)
{
GraphMatrix gm = new GraphMatrix(); gm.GraphType = 0;
CreateGraphDemo(gm);
gm.DeepTraGraph(); gm.OutGraph();
Console.ReadLine();
} static void CreateGraphDemo(GraphMatrix gm)
{
gm.VertexNum = 4;
gm.EdgeNum = 4;
gm.Vertex[0] = 'A';
gm.Vertex[1] = 'B';
gm.Vertex[2] = 'C';
gm.Vertex[3] = 'D'; SetInfo(gm, 'A', 'B', 5);
Console.WriteLine("第一次");
WriterInfo(gm);
SetInfo(gm, 'B', 'C', 5);
Console.WriteLine("第二次");
WriterInfo(gm);
SetInfo(gm, 'C', 'D', 5);
Console.WriteLine("第三次");
WriterInfo(gm);
SetInfo(gm, 'D', 'A', 5);
Console.WriteLine("第四次");
WriterInfo(gm);
} static void SetInfo(GraphMatrix gm,int eStartV = 0,int eEndV = 0,int weight = 0)
{
int len = gm.Vertex.Length; for (int i = 0; i < len; i++)
{
if (gm.Vertex[i] == eStartV)
{
for (int j = 0; j < len; j++)
{
if (gm.Vertex[j] == eEndV)
{
//赋值权重
gm.EdgeWeight[i][j] = weight;
if (gm.GraphType == 0)
{
gm.EdgeWeight[j][i] = weight;
}
}
}
}
}
} static void WriterInfo(GraphMatrix gm)
{
for (int i = 0; i < gm.EdgeWeight.Length; i++)
{
for (int j = 0; j < gm.EdgeWeight[i].Length; j++)
{
Console.Write(gm.EdgeWeight[i][j] + " ");
}
Console.WriteLine();
}
Console.WriteLine();
} }
}
效果图:

C# 图结构操作的更多相关文章
- C++图结构的图结构操作示例
示例代码: /* By qianshou 2013/10/5明天就要开学了~哎~ */ #include<iostream> using namespace std; /********* ...
- Theano学习笔记(三)——图结构
图结构(Graph Structures)这是理解Theano该基金会的内部运作. Theano编程的核心是用符号占位符把数学关系表示出来. 图结构的组成部分 如图实现了这段代码: importthe ...
- IDEA使用笔记(十一)——好玩的类图结构
今天使用 IntelliJ IDEA 发现一个好玩的操作,尤其对于研究源码了解类的层级关系有非常大的帮助! 1:先看效果 1-1:HashSet的类图结构——继承什么类.实现什么接口一目了然 1-2: ...
- go语言入门教程百度网盘 mysql图形化操作与数据导入
mysql图形化操作与数据导入 @author:Davie 版权所有:北京千锋互联科技有限公司 数据库存储技术 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库.每个数据库都有一个 ...
- c++实验9 图及图的操作实验
实验9 图及图的操作实验 --博客后半部分有程序的所有代码-- 1.图邻接矩阵存储结构表示及基本操作算法实现 (1)邻接矩阵存储结构类定义: #include "SeqList.h" ...
- JavaScript实现图结构
JavaScript实现图结构 一.图论 1.1.图的简介 什么是图? 图结构是一种与树结构有些相似的数据结构: 图论是数学的一个分支,并且,在数学中,树是图的一种: 图论以图为研究对象,研究顶点和边 ...
- 图结构练习——判断给定图是否存在合法拓扑序列(dfs算法(第一个代码),邻接矩阵(前两个代码),邻接表(第三个代码))
sdut 2140 图结构练习——判断给定图是否存在合法拓扑序列 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 给定一个有向图 ...
- 图结构练习——最短路径(floyd算法(弗洛伊德))
图结构练习——最短路径 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 给定一个带权无向图,求节点1到节点n的最短路径. 输 ...
- 图结构练习——最短路径(dijkstra算法(迪杰斯拉特))
图结构练习——最短路径 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 给定一个带权无向图,求节点1到节点n的最短路径. ...
随机推荐
- oracle触发器实例
8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8.2.2 创建DML触发器 8.2.3 创建替代(INS ...
- iOS、mac开源项目及库(感谢原作者的分享)
目录 模糊效果 富文本 表相关 HUD与Toast 其他UI 其他动画 网络测试 网络聊天 Model 数据库 PDF 摄像照相视频音频处理 消息相关 消息推送服务器端 版本新API的Demo 测试及 ...
- Android 基于Netty的消息推送方案之概念和工作原理(二)
上一篇文章中我讲述了关于消息推送的方案以及一个基于Netty实现的一个简单的Hello World,为了更好的理解Hello World中的代码,今天我来讲解一下关于Netty中一些概念和工作原理的内 ...
- JS客户端读取Excel文件插件js-xls使用方法
js-xls是一款客户端读取Excel的插件,亲测IE11.FireFox.Chrome可用,读取速度也客观. 插件Demo地址:http://oss.sheetjs.com/js-xlsx/ ...
- Errore HTTP 404.2 - Not Found" IIS 7.5 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理
解决方法: 找到IIS的根节点->右侧“ISAPI和CGI限制”->把禁止的ASP.Net版本项设置为允许. 如下图 今天配置本地iis出现了一些问题,第一个是出现cgi等错误,iis重新 ...
- js获取当前的时间(包含星期)
<script type="text/javascript"> setInterval("www_zzje_net.innerHTML=new ...
- 业余编程 SQL 编程学习——1 (SQL Server 2008 R2)
1.建立test数据库: 2.创建test1数据表: test1表属性如下: 其中,ID字段设置为标识增量,增量种子为1: 这个实例是实现从第一行数据开始,将每一行最后一个字段值加下一行第二个字段值再 ...
- RAC的负载均衡有2种方式
RAC的负载均衡有2种方式1:数据库服务器端 设置remote_listener2: 客户端tns配置 一般连接串这么写:ess_hb_i1= (DESCRIPTION = (ADDRESS ...
- iOS调节系统音量
目录[-] 使用MPVolumeView 编程实现系统音量调节2 通过MPVolumeSlider的实例来操作系统音量 有问题!我不喜欢系统弹出音量提示 还有问题,我修改了系统音量但是不是通过我的UI ...
- 设置cas server使用http非安全协议
目录 1.tomcat添加https安全协议 2.下载cas server端部署到tomcat上 3.CAS服务器深入配置(连接MYSQL) 4.Apache Shiro 集成Cas作为cas cli ...