2021-11-13

#include
#include <stdlib.h>
using namespace std;
#define OK 1;
#define ERROR 0;
#define MVNum 100;
#define MaxInt 32767;
// 定义最大长度为100
#define MAXSIZE 100
// 队列
typedef struct SqQueue
{
char *base;
int front, rear;
} SqQueue;
// 图
typedef struct
{
char vexs[100];
int arcs[100][100];
int vexnum, arcnum;
} AMGraph;
// 具有最小代价的边
typedef struct
{
char adjvex; // 最小边的顶点
int lowcost; // 最小边的权值
} closedge;

// 创建一个空队列
int InitQueue(SqQueue &q, int n = MAXSIZE)
{
q.base = new char[n];
q.front = 0;
q.rear = 0;
return OK;
}
// 入队
int EnQueue(SqQueue &q, int e, int n = MAXSIZE)
{
if ((q.rear + 1) % n == q.front)
return ERROR;
q.base[q.rear] = e;
q.rear = (q.rear + 1) % n;
return OK;
}
// 出队
int DeQueue(SqQueue &q, int &e, int n = MAXSIZE)
{
if (q.front = q.rear)
return ERROR;
e = q.base[q.front];
q.front = (q.front + 1) % n;
return OK;
}
// 判断队列是否为空
int QueueEmpty(SqQueue q)
{
if (q.front == q.rear)
return OK;
return ERROR;
}
// // 生成【0,n)的随机数,便于调试
// int getRandomNumber(int n = 10)
// {
// return rand() % n;
// }
// 定位图中顶点集中顶点的位置
int LocateVex(AMGraph &G, char vex)
{
int i;
for (i = 0; i < G.vexnum; i++)
{
if (vex == G.vexs[i])
return i;
}
return -1;
}
// 创建图,采用邻接矩阵的方法
int CreateUDN(AMGraph &G)
{
int i, j, weight;
// v1,v2为顶点对,l1,l2为顶点对应的位置
char v1, v2;
int l1, l2;
// 输入顶点数、边数
cin >> G.vexnum >> G.arcnum;
for (i = 0; i < G.vexnum; i++)
{
cin >> G.vexs[i];
}
// 将邻接矩阵的值初始化正无穷
for (i = 0; i < G.vexnum; i++)
{
for (j = 0; j < G.vexnum; j++)
G.arcs[i][j] = MaxInt;
}
// 输入顶点对,创建邻接矩阵
for (i = 0; i < G.arcnum; i++)
{
// 输入顶点对和他们的权值
cin >> v1;
cin >> v2;
cin >> weight;
getchar();
// 得到顶点对在顶点集的下标
l1 = LocateVex(G, v1);
l2 = LocateVex(G, v2);
// 有顶点对的边记为他们的权值
G.arcs[l1][l2] = weight;
G.arcs[l2][l1] = weight;
}
return OK;
}
// DFS algorithm 连通图
int DFS(AMGraph G, int v, int *visited)
{

// output vexs[v]
cout << G.vexs[v] << ' ';
// mark the node
visited[v] = 1;
// 遍历该节点的邻接结点,如果未访问则调用DFS
for (int i = 0; i < G.vexnum; i++)
{
    if ((G.arcs[v][i] != 32767) && (visited[i] == 0))
        DFS(G, i, visited);
}
return OK;

}

// 深度优先的遍历算法
int DFSTraverse(AMGraph G)
{
cout << “DFS” << endl;
char v;
int visited[G.vexnum] = {0};
cout << “请输入起始节点” << endl;
cin >> v;
DFS(G, LocateVex(G, v), visited);
cout << endl;
for (v = 0; v < G.vexnum; ++v)
if (!visited[v])
DFS(G, v, visited); // 对尚未访问的顶点调用DFS
cout << endl;
return OK;
}

// 广度优先的遍历算法
int BFSTraverse(AMGraph G)
{
cout << “BFS” << endl;
SqQueue q;
InitQueue(q);
int w, u, visited[G.vexnum] = {0};
char v;
cout << “请输入起始节点” << endl;
cin >> v;
int index = LocateVex(G, v);
cout << G.vexs[index] << ’ '; //访问V
visited[index] = 1; //对v做标记
EnQueue(q, v); //将v入队
while (!QueueEmpty(q))
{
DeQueue(q, u, G.vexnum); //队头元素出队,置为u
// 遍历v的邻接结点,如果没有被访问过,则访问
for (w = 0; w < G.vexnum; w++)
{
if ((G.arcs[v][w] != 32767) && (visited[w] == 0))
{
cout << G.vexs[w] << ’ ';
// 对w做标记
visited[w] = 1;
//将w入队
EnQueue(q, w);
}
}
}
cout << endl;
// 完成
return OK;
}
int Min(AMGraph G, closedge *closedge)
{ //返回权值最小的点
int index = -1;
int min = MaxInt;
for (int i = 0; i < G.vexnum; ++i)
{
if (closedge[i].lowcost != 0 && min > closedge[i].lowcost)
{
min = closedge[i].lowcost;
index = i;
}
} // for
return index;
} // Min

void MiniSpanTreePrim(AMGraph G)
{ //无向网G以邻接矩阵形式存储,从顶点u出发构造G的最小生成树T,输出T的各条边
// cout << “Prim” << endl;
cout << “请输入起始节点” << endl;
char u;
closedge closedge[G.vexnum];
cin >> u;
cout << u;
int k = LocateVex(G, u); // k为顶点u的下标
for (int j = 0; j < G.vexnum; ++j)
{ //对V-U的每一个顶点vi,初始化closedge[i]
if (j != k)
{
closedge[j].adjvex = u;
closedge[j].lowcost = G.arcs[k][j]; //{adjvex, lowcost}
} // if
} // for
closedge[k].lowcost = 0;
for (int i = 1; i < G.vexnum; ++i)
{
//选择其余n-1个顶点,生成n-1条边(n= G.vexnum)
k = Min(G, closedge); //求出T的下一个顶点:closedge[k]中存有当前最小边
char u0 = closedge[k].adjvex; // u0为最小边的一个顶点,u0∈U
char v0 = G.vexs[k]; // v0为最小边的另一个顶点, v0∈V-U
cout << “—>” << v0; //输出当前的最小边(u0, v0)
closedge[k].lowcost = 0; //第k个顶点并入U集
for (int j = 0; j < G.vexnum; ++j)
if (G.arcs[k][j] < closedge[j].lowcost)
{ //新顶点并入U后更新V-U中的权值
closedge[j].adjvex = G.vexs[k];
closedge[j].lowcost = G.arcs[k][j];
} // if
}
cout << endl;
} // MiniSpanTree_Primi

int main()
}`@TOC

欢迎使用Markdown编辑器

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

新的改变

我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

  1. 全新的界面设计 ,将会带来全新的写作体验;
  2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
  3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
  4. 全新的 KaTeX数学公式 语法;
  5. 增加了支持甘特图的mermaid语法1 功能;
  6. 增加了 多屏幕编辑 Markdown文章功能;
  7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
  8. 增加了 检查列表 功能。

功能快捷键

撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替换:Ctrl/Command + G

合理的创建标题,有助于目录的生成

直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

如何改变文本的样式

强调文本 强调文本

加粗文本 加粗文本

标记文本

删除文本

引用文本

H2O is是液体。

210 运算结果是 1024.

插入链接与图片

链接: link.

图片: Alt

带尺寸的图片: Alt

居中的图片: Alt

居中并且带尺寸的图片: Alt

当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

如何插入一段漂亮的代码片

博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

// An highlighted block
var foo = 'bar';

生成一个适合你的列表

  • 项目
    • 项目
      • 项目
  1. 项目1
  2. 项目2
  3. 项目3
  • 计划任务
  • 完成任务

创建一个表格

一个简单的表格是这么创建的:

项目Value
电脑$1600
手机$12
导管$1

设定内容居中、居左、居右

使用:---------:居中
使用:----------居左
使用----------:居右

第一列第二列第三列
第一列文本居中第二列文本居右第三列文本居左

SmartyPants

SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

TYPEASCIIHTML
Single backticks'Isn't this fun?'‘Isn’t this fun?’
Quotes"Isn't this fun?"“Isn’t this fun?”
Dashes-- is en-dash, --- is em-dash– is en-dash, — is em-dash

创建一个自定义列表

Markdown
Text-to- HTML conversion tool
Authors
John
Luke

如何创建一个注脚

一个具有注脚的文本。2

注释也是必不可少的

Markdown将文本转换为 HTML

KaTeX数学公式

您可以使用渲染LaTeX数学表达式 KaTeX:

Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n1)!nN 是通过欧拉积分

Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t   . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=0tz1etdt.

你可以找到更多关于的信息 LaTeX 数学表达式here.

新的甘特图功能,丰富你的文章

Mon 06 Mon 13 Mon 20 已完成 进行中 计划一 计划二 现有任务 Adding GANTT diagram functionality to mermaid
  • 关于 甘特图 语法,参考 这儿,

UML 图表

可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:

张三 李四 王五 你好!李四, 最近怎么样? 你最近怎么样,王五? 我很好,谢谢! 我很好,谢谢! 李四想了很长时间, 文字太长了 不适合放在一行. 打量着王五... 很好... 王五, 你怎么样? 张三 李四 王五

这将产生一个流程图。:

链接
长方形
圆角长方形
菱形
  • 关于 Mermaid 语法,参考 这儿,

FLowchart流程图

我们依旧会支持flowchart的流程图:

Created with Raphaël 2.3.0 开始 我的操作 确认? 结束 yes no
  • 关于 Flowchart流程图 语法,参考 这儿.

导出与导入

导出

如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

导入

如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。


  1. mermaid语法说明 ↩︎

  2. 注脚的解释 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值