当前位置: 首页 > news >正文

做网站图片格式制作人小说

做网站图片格式,制作人小说,国外出名设计网站有哪些,报价网站摘自#xff1a;数据结构—无向图创建邻接矩阵、深度优先遍历和广度优先遍历#xff08;C语言版#xff09; 作者#xff1a;正弦定理 发布时间#xff1a;2020-12-19 17:25:49 网址#xff1a;https://blog.csdn.net/zhuguanlin121/article/details/118436142 无向图创建… 摘自数据结构—无向图创建邻接矩阵、深度优先遍历和广度优先遍历C语言版 作者正弦定理 发布时间2020-12-19 17:25:49 网址https://blog.csdn.net/zhuguanlin121/article/details/118436142 无向图创建邻接矩阵、深度优先遍历和广度优先遍历 一、概念解析1无向图2邻接矩阵 二、创建邻接矩阵三、深度遍历、广度遍历1深度遍历概念2广度遍历概念 四、实例展示 一、概念解析 1无向图 假设图G由两个集合V和E组成记为G{V , E}。其中V是顶点的有限集合E是连接V中两个不同顶点的边的有限集合。如果E中的顶点对是有序的即E中的每条边都是有方向的则称G是有向图。如果顶点对是无序的则称G是无向图 2邻接矩阵 邻接矩阵主要由二维数组 实现 如图 转换成邻接矩阵为 二、创建邻接矩阵 基本每一步都有注释详细观看建议画图理解 代码如下 #define MAXSIZE 100 // 邻接矩阵 typedef struct Matrix{int V_Data; // 顶点数据域 int E_Data; // 边数数据域int Node[MAXSIZE]; // 存放顶点数据也就是顶点表 int Weight[MAXSIZE][MAXSIZE]; // 存放权重为矩阵中两点有边的标记符号 }MaTrix,*MATRIX;// 邻接矩阵数据结构体 typedef struct Edge{int v1; // 用来存放第一个顶点 int v2; // 用来存放第二个顶点int weight; // 用来存放两点之间的标记符即为权 }*EDGE;//******************** 邻接矩阵*******************// // 邻接矩阵、顶点和边初始化 void Init_Matrix(MATRIX S,int Vertex) { S-E_Data 0; // 初始化为0条边 S-V_Data Vertex; // 初始化顶点数 int i,j;for(i0;iVertex;i){for(j0;jVertex;j){S-Weight[i][j] 0;}} }// 开始插入边的权重即为两个顶点之间边的标记符 void InSerData(MATRIX S,EDGE E) {// 将输入的顶点v1、v2之间的边用权作为标记在矩阵中表示// 这里是无向图所以边没有方向需要做标记两次为v1-v2和v2-v1 S-Weight[E-v1][E-v2] E-weight; S-Weight[E-v2][E-v1] E-weight; } // 开始插入数据 void InSerEdge_Data(MATRIX S,int edge,int V) {int i,j;if(edge0) // 边数大于0的时候才插入数据 {printf(请输入顶点和权重(空格分隔!)\n);for(i0;iedge;i){ EDGE E; //分配内存接受顶点v1,v2和权重标记符 E (EDGE)malloc(sizeof(struct Edge)); scanf(%d %d %d,(E-v1),(E-v2),(E-weight));if(E-v1 E-v2){printf(无向图邻接矩阵对角线为0,输入错误,结束运行\n);exit(-1); }InSerData(S,E);} printf(请输入要定义的顶点填入顶点表中: \n);for(j0;jV;j){scanf(%d,(S-Node[j]));}}else{ printf(输入的边数错误); } } 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 三、深度遍历、广度遍历 1深度遍历概念 定义的结构体、数组可看上面代码 深度遍历代码解析 //***************** 深度优先遍历算法—邻接矩阵 *****************// void DFS_Begin(MATRIX P,int k,int V) {int i;flag[k] 1; //标记当前顶点表示已经遍历过printf(%d ,P-Node[k]); // 输出当前顶点 for(i0;iV;i){if(!flag[i] P-Weight[k][i] ! 0)// 如果当前顶点的邻近点存在且没有遍历过 { // 则继续递归遍历 DFS_Begin(P,i,V); // 递归遍历当前顶点的邻近点 } } }void Init_DFSMatrix(MATRIX P,int V) {int i;// 初始化标记符数组全为0 for(i0;iV;i){flag[i] 0;}for(i0;iV;i) // 每个顶点都要检查是否遍历到 {if(!flag[i]) // 排除遇到已经遍历的顶点DFS_Begin(P,i,V); // 开始深度遍历 } putchar(\n);} 123456789101112131415161718192021222324252627282930313233343536 2广度遍历概念 这里使用到了链队列也可以使用数组队列看个人想法可以看我之前的博文有讲 //******************** 队列 *****************// typedef struct Queue{int data[MAXSIZE]; // 队列大小 int head; // 队头 int wei; // 队尾 }Queue; //***************** 队列 *************************************// // 队列初始化 void InitQueue(Queue *q) {q-head 0; // 初始化队头、队尾 q-wei 0; } // 判断队列是否为空 int EmptyQueue(Queue *q) {if(q-head q-wei)return 1;else{return 0;} } // 入队 void PushQueue(Queue *q,int t) {if((q-wei1)%MAXSIZE q-head) // 说明队列已经满了return;else{ q-data[q-wei] t; q-wei (q-wei 1)%MAXSIZE; // 队尾后移 }} // 出队 void PopQueue(Queue *q,int *x) {if(q-wei q-head) // 出队完毕 return; else{ *x q-data[q-head];q-head (q-head 1)%MAXSIZE; // 队头后移 } } //***************** 广度优先搜索算法—邻接矩阵 ****************// void Init_Bfs(MATRIX S,int V) {int i,j;int k;Queue Q;for(i0;iV;i){Vist[i] 0; // 初始化标记符 }InitQueue(Q); // 队列初始化 for (i 0; i V; i){if (!Vist[i]) // 判断以这个顶点为基准有连接的其他顶点 {Vist[i] 1; // 标记遍历的这个顶点 printf(%d , S-Node[i]);PushQueue(Q, i); // 入队 while (!EmptyQueue(Q)) // 队列中还有数据说明这个顶点连接的其他顶点还没有遍历完 {PopQueue(Q,i); // 出队 for (j 0; j V; j){// 以这个顶点为基准遍历其他连接的顶点 if (!Vist[j] S-Weight[i][j] ! 0){Vist[j] 1; // 与之连接的顶点作上标记便于后序顶点跳过相同的遍历 printf(%d , S-Node[j]);// 输出与之相邻连接的顶点 PushQueue(Q, j); // 让与之连接的顶点其位置入队 }}}}} } 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 四、实例展示 注意这里存入数据时坐标点以原点0,0为起点开始 以这个图为样例展示 全部代码 #includestdio.h #includestdlib.h#define MAXSIZE 100 // 深度遍历标记符 int flag[MAXSIZE]; // 邻接矩阵 // 广度优先遍历标记符 int Vist[MAXSIZE]; // 邻接矩阵//******************** 队列 *****************// typedef struct Queue{int data[MAXSIZE]; // 队列大小 int head; // 队头 int wei; // 队尾 }Queue; // 邻接矩阵 typedef struct Matrix{int V_Data; // 顶点数据域 int E_Data; // 边数数据域int Node[MAXSIZE]; // 存放顶点数据也就是顶点表 int Weight[MAXSIZE][MAXSIZE]; // 存放权重为矩阵中两点有边的标记符号 }MaTrix,*MATRIX;// 邻接矩阵数据结构体 typedef struct Edge{int v1; // 用来存放第一个顶点 int v2; // 用来存放第二个顶点int weight; // 用来存放两点之间的标记符即为权 }*EDGE;//******************** 邻接矩阵*******************// // 邻接矩阵、顶点和边初始化 void Init_Matrix(MATRIX S,int Vertex) { S-E_Data 0; // 初始化为0条边 S-V_Data Vertex; // 初始化顶点数 int i,j;for(i0;iVertex;i){for(j0;jVertex;j){S-Weight[i][j] 0;}} }// 开始插入边的权重即为两个顶点之间边的标记符 void InSerData(MATRIX S,EDGE E) {// 将输入的顶点v1、v2之间的边用权作为标记在矩阵中表示// 这里是无向图所以边没有方向需要做标记两次为v1-v2和v2-v1 S-Weight[E-v1][E-v2] E-weight;S-Weight[E-v2][E-v1] E-weight; } //***************** 深度优先遍历算法—邻接矩阵 *****************// void DFS_Begin(MATRIX P,int k,int V) {int i;flag[k] 1; //标记当前顶点表示已经遍历过printf(%d ,P-Node[k]); // 输出当前顶点 for(i0;iV;i){if(!flag[i] P-Weight[k][i] ! 0)// 如果当前顶点的邻近点存在且没有遍历过 { // 则继续递归遍历 DFS_Begin(P,i,V); // 递归遍历当前顶点的邻近点 } } }void Init_DFSMatrix(MATRIX P,int V) {int i;// 初始化标记符数组全为0 for(i0;iV;i){flag[i] 0;}for(i0;iV;i) // 每个顶点都要检查是否遍历到 {if(!flag[i]) // 排除遇到已经遍历的顶点DFS_Begin(P,i,V); // 开始深度遍历 } putchar(\n);}//***************** 队列 *************************************// // 队列初始化 void InitQueue(Queue *q) {q-head 0; // 初始化队头、队尾 q-wei 0; } // 判断队列是否为空 int EmptyQueue(Queue *q) {if(q-head q-wei)return 1;else{return 0;} } // 入队 void PushQueue(Queue *q,int t) {if((q-wei1)%MAXSIZE q-head) // 说明队列已经满了return;else{ q-data[q-wei] t; q-wei (q-wei 1)%MAXSIZE; // 队尾后移 }} // 出队 void PopQueue(Queue *q,int *x) {if(q-wei q-head) // 出队完毕 return; else{*x q-data[q-head];q-head (q-head 1)%MAXSIZE; // 队头后移} } //***************** 广度优先搜索算法—邻接矩阵 ****************// void Init_Bfs(MATRIX S,int V) {int i,j;int k;Queue Q;for(i0;iV;i){Vist[i] 0; // 初始化标记符 }InitQueue(Q); // 队列初始化 for (i 0; i V; i){if (!Vist[i]) // 判断以这个顶点为基准有连接的其他顶点 {Vist[i] 1; // 标记遍历的这个顶点 printf(%d , S-Node[i]);PushQueue(Q, i); // 入队 while (!EmptyQueue(Q)) // 队列中还有数据说明这个顶点连接的其他顶点还没有遍历完 {PopQueue(Q,i); // 出队 for (j 0; j V; j){// 以这个顶点为基准遍历其他连接的顶点 if (!Vist[j] S-Weight[i][j] ! 0){Vist[j] 1; // 与之连接的顶点作上标记便于后序顶点跳过相同的遍历 printf(%d , S-Node[j]);// 输出与之相邻连接的顶点 PushQueue(Q, j); // 让与之连接的顶点其位置入队 }}}}} } // 初始化顶点个数 int Init_Vertex() {int Vertex;printf(请输入顶点个数: );scanf(%d,Vertex);return Vertex; }// 初始化边的数量 int Init_Edge() {int edge;printf(请输入边的数量: );scanf(%d,edge);return edge;} // 开始插入数据 void InSerEdge_Data(MATRIX S,int edge,int V) {int i,j;if(edge0) // 边数大于0的时候才插入数据 {printf(请输入顶点和权重(空格分隔!)\n);for(i0;iedge;i){ EDGE E; //分配内存接受顶点v1,v2和权重标记符 E (EDGE)malloc(sizeof(struct Edge)); scanf(%d %d %d,(E-v1),(E-v2),(E-weight));if(E-v1 E-v2){printf(无向图邻接矩阵对角线为0,输入错误,结束运行\n);exit(-1); }InSerData(S,E);} printf(请输入要定义的顶点填入顶点表中: \n);for(j0;jV;j){scanf(%d,(S-Node[j]));}}else{printf(输入的边数错误); } } // 打印无向图邻接矩阵 void Show_Matrix(MATRIX p,int Vertex) {int i,j;for(i0;iVertex;i){for(j0;jVertex;j){printf(%4d,p-Weight[i][j]); // 打印邻接矩阵 } putchar(\n); // 换行 } }int main() {int val;int Vertex;int edge;MATRIX p; // 邻接矩阵头节点指针// 创建无向图邻接矩阵 Vertex Init_Vertex();edge Init_Edge();p (MATRIX)malloc(sizeof(MaTrix)); //分配内存空间 p-V_Data Vertex; // 记录顶点个数 p-E_Data edge; // 记录边的个数 Init_Matrix(p,Vertex); // 初始化邻接矩阵 InSerEdge_Data(p,edge,Vertex); // 插入数据 // 打印无向图的邻接矩阵 printf(无向图邻接矩阵如下:); printf(\n----------------------------------\n\n);Show_Matrix(p,Vertex);printf(\n----------------------------------\n);// 深度优先遍历—邻接矩阵 printf(深度遍历—邻接矩阵结果为:\n);Init_DFSMatrix(p,Vertex);// 广度优先遍历—邻接矩阵printf(广度优先遍历—邻接矩阵结果为: \n);Init_Bfs(p,Vertex);return 0; } 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303 结果图
http://www.yutouwan.com/news/63044/

相关文章:

  • 网站页面链接结构网站开发投票代码
  • PHP套模板做网站陕西江川建设有限公司公司网站
  • 有没有做电子名片的网站站长工具seo综合查询5g
  • 国外建设网站国外做饮用来源的网站
  • 网站管理问题南昌做建网站的
  • 环保网站模板代码企业网站主要有哪四种类型
  • 自己制作网站的方法是如何提高网站的点击量
  • 建材网站建设 南宁电影采集网站流量
  • 上海做网站的知名企业网站建设发专业人才培养方案
  • 加强公司窗口网站建设站长之家的seo综合查询工具
  • 中国建设工程招标网官方网站中国最大的软件公司排名
  • 网站建设的分阶段步骤体育论坛网站建设
  • 淘宝联盟推广网站怎么建设客户管理系统小程序
  • 南宁seo网站建设山东企业网站建设推荐
  • 怎么做彩票网站代理网站开发服务器配置
  • 北京餐饮网络营销公司浙江网站建设抖音seo优化
  • 门户网站什么意思国外销售网站
  • 网站建设 ader关于茶文化网站建设的背景
  • 贺州做网站南阳专业网站制作费用
  • 网站小图标素材下载杭州网站备案
  • 济宁网站建设济宁天津网站推广外包
  • 网站怎么做反链wap网站是什么意思啊
  • 男女情感类网站数学老师做直播的网站
  • 容桂网站建设原创ps做网站横幅
  • 弄美团网站的一般一个做赚多少钱手机网站开发介绍
  • 做网站打广告图片素材开发公司多收公共维修基金情况说明
  • 深圳有哪些做网站公司天宁建设网站
  • 做网站市场价格中铁建发展集团有限公司
  • 网站配置怎么html5做宠物饲养网站
  • 官方网站建设合作协议一直免费的服务器下载