小视频app源码,邻接矩阵实现图的相关代码

/*Author:Albert Tesla WizardTime:2020/10/26 20:22
*/#include<bits/stdc++.h>
#define OK 1
#define Infinity INT_MAX
#define Error -1
const int MAXSIZE=20;
using namespace std;
typedef enum{DG,UDG,DN,UDN}Graphtype;
typedef int TypeElement;
struct Graph
{int vertexnum;int arcnum;TypeElement arc[MAXSIZE][MAXSIZE];char vertex[MAXSIZE];Graphtype type;
};
//找到顶点v在图中的位置
int Locate(char v,Graph&G)
{for(int i=1;i<=G.vertexnum;i++){if(v==G.vertex[i])return i;}return -1;
}
//创建图G
void create(Graph&G)
{cout<<"请输入图的类型:0.有向图 1.无向图 2.有向网 3.无向网"<<endl;int type,v1,v2;char c1,c2;cin>>type;if(type==DG){G.type=DG;}else if(type==UDG){G.type=UDG;}else if(type==DN){G.type=DN;}else if(type==UDN){G.type=UDN;}cout<<"请输入图的顶点数目:"<<endl;cin>>G.vertexnum;cout<<"请输入图的弧的数目:"<<endl;cin>>G.arcnum;cout<<"请输入各个顶点的值:"<<endl;for(int i=1;i<=G.vertexnum;i++)cin>>G.vertex[i];if(G.type==DG||G.type==UDG){for(int i=1;i<=G.vertexnum;i++)for(int j=1;j<=G.vertexnum;j++)G.arc[i][j]=0;}else if(G.type==DN||G.type==UDN){for(int i=1;i<=G.vertexnum;i++)for(int j=1;j<=G.vertexnum;j++)G.arc[i][j]=INT_MAX;}for(int i=1;i<=G.arcnum;i++){cout<<"请输入各条弧的两个节点v1,v2:"<<endl;cin>>c1>>c2;v1=Locate(c1,G);v2=Locate(c2,G);if(G.type==DG){G.arc[v1][v2]=1;}else if(G.type==UDG){G.arc[v1][v2]=G.arc[v2][v1]=1;}else if(G.type==DN){cout<<"请输入该边的权值:"<<endl;int weight;cin>>weight;G.arc[v1][v2]=weight;}else if(G.type==UDN){cout<<"请输入该边的权值:"<<endl;int weight;cin>>weight;G.arc[v1][v2]=weight;G.arc[v2][v1]=G.arc[v1][v2];}}
}
void print(Graph&G)
{if(G.type==DG)cout<<"图的类型:有向图"<<endl;else if(G.type==UDG)cout<<"图的类型:无向图"<<endl;else if(G.type==DN)cout<<"图的类型:有向网"<<endl;else if(G.type==UDN)cout<<"图的类型:无向网"<<endl;cout<<"图的顶点数目:"<<G.vertexnum<<endl;cout<<"图的弧的数目:"<<G.arcnum<<endl;cout<<"图的顶点集合:";for(int i=1;i<=G.vertexnum;i++)cout<<G.vertex[i]<<" ";cout<<endl;cout<<"图的邻接矩阵:"<<endl;bool flag=true;for(int i=1;i<=G.vertexnum;i++){for(int j=1;j<=G.vertexnum;j++){if(flag){flag=false;cout<<G.arc[i][j];}else {cout<<setw(4)<<G.arc[i][j]<<" ";}}flag=true;cout<<endl;}
}
//根据顶点在图中的相对位置返回顶点的值
char GetVertex(int index,Graph&G)
{if(index<=G.vertexnum)return G.vertex[index];
}
//对顶点v重新赋值
int putVertex(char v,char v1,Graph&G)//v为图中原有的顶点值,v1为新的顶点值
{int k=Locate(v,G);if(k!=-1){G.vertex[k]=v1;}return OK;
}
//找到顶点v的第一个邻接点
int firstadjacent(char v,Graph&G)
{if(G.type==DG||G.type==UDG){int k=Locate(v,G);for(int j=1;j<=G.vertexnum;j++)if(G.arc[k][j]!=0)return j;}else if(G.type==DN||G.type==UDN){int k=Locate(v,G);for(int j=1;j<=G.vertexnum;j++)if(G.arc[k][j]!=Infinity)return j;}return -1;
}
//w是v的邻接顶点,找到v相对于w的下一个邻接顶点
int nextadjacent(char v,char w,Graph&G)
{int k1=Locate(v,G);int k2=Locate(w,G);if(G.type==DG||G.type==UDG){for(int j=k2+1;j<=G.vertexnum;j++){if(G.arc[k1][j]!=0)return j;}}else if(G.type==DN||G.type==UDN){for(int j=k2+1;j<=G.vertexnum;j++){if(G.arc[k1][j]!=Infinity)return j;}}return -1;
}
//在图中插入一个新的顶点
int Insert(char v,Graph&G)
{G.vertex[G.vertexnum+1]=v;if(G.type==DG||G.type==UDG){for(int i=1;i<=G.vertexnum+1;i++){G.arc[i][G.vertexnum+1]=G.arc[G.vertexnum+1][i]=0;}}else if(G.type==DN||G.type==UDN){for(int i=1;i<=G.vertexnum+1;i++){G.arc[i][G.vertexnum+1]=G.arc[G.vertexnum+1][i]=Infinity;}}G.vertexnum+=1;
}
//在图中删除一个顶点及与它相关联的边
int Delete(char v,Graph&G)
{int k=Locate(v,G);if(k==-1)return Error;for(int i=1;i<=G.vertexnum-1;i++)G.vertex[i]=G.vertex[i+1];for(int i=1;i<=G.vertexnum;i++)for(int j=1;j<=G.vertexnum-1;j++)G.arc[i][j]=G.arc[i][j+1];for(int i=1;i<=G.vertexnum-1;i++)for(int j=1;j<=G.vertexnum;j++)G.arc[i][j]=G.arc[i+1][j];G.vertexnum--;
}
//在图中插入一条弧
int Insertarc(char v,char w,Graph&G)
{int k1=Locate(v,G);int k2=Locate(w,G);if(k1<0||k2<0)return Error;if(G.type==DG){G.arc[k1][k2]=1;}else if(G.type==UDG){G.arc[k1][k2]=G.arc[k2][k1]=1;}else if(G.type==DN){int weight;cout<<"请输入该边的权值:"<<endl;cin>>weight;G.arc[k1][k2]=weight;}else if(G.type==UDN){int weight;cout<<"请输入该边的权值:"<<endl;cin>>weight;G.arc[k1][k2]=G.arc[k2][k1]=weight;}G.arcnum++;
}
//在图中删除一条弧
int Deletearc(char v,char w,Graph&G)
{int k1=Locate(v,G);int k2=Locate(w,G);if(k1<0||k2<0)return Error;if(G.type==DG){G.arc[k1][k2]=0;}else if(G.type==UDG){G.arc[k1][k2]=G.arc[k2][k1]=0;}else if(G.type==DN){G.arc[k1][k2]=Infinity;}else if(G.type==UDN){G.arc[k1][k2]=G.arc[k2][k1]=Infinity;}G.arcnum--;
}
bool visited[MAXSIZE];
int DFS(int index,Graph&G)
{visited[index]=true;cout<<G.vertex[index]<<" ";char v=GetVertex(index,G);for(index=firstadjacent(v,G);index!=-1;index=nextadjacent(v,GetVertex(index,G),G))if(!visited[index])DFS(index,G);return OK;
}
int DFS1(int index,Graph&G)
{visited[index]=true;cout<<G.vertex[index]<<" ";for(int i=1;i<=index;i++){if(G.arc[index][i]!=0&&!visited[i])DFS1(i,G);}
}
//深度优先遍历图中顶点
int DFStraverse(Graph&G)
{for(int i=1;i<=G.vertexnum;i++)visited[i]=false;for(int i=1;i<=G.vertexnum;i++)if(!visited[i])DFS1(i,G);cout<<endl;return OK;
}
//广度优先遍历图中顶点
int BFStraverse(Graph&G)
{char v;queue<char>Q;for(int i=1;i<=G.vertexnum;i++)visited[i]=false;for(int i=1;i<=G.vertexnum;i++)if(!visited[i]){visited[i]=true;cout<<G.vertex[i]<<" ";v=G.vertex[i];Q.push(v);while(!Q.empty()){v=Q.front();Q.pop();for(int index=firstadjacent(v,G);index!=-1;index=nextadjacent(v,GetVertex(index,G),G))if(!visited[index]){visited[index]=true;cout<<G.vertex[index]<<" ";Q.push(G.vertex[index]);}}}cout<<endl;
}
int main()
{Graph G;create(G);print(G);cout<<"深度遍历:"<<endl;DFStraverse(G);cout<<"广度遍历:"<<endl;BFStraverse(G);return 0;
}

以上就是小视频app源码,邻接矩阵实现图的相关代码, 更多内容欢迎关注之后的文章

小视频app源码,邻接矩阵实现图的相关代码相关推荐

  1. 小视频app源码,Android 滑动拼图验证码控件

    小视频app源码,Android 滑动拼图验证码控件 代码实现: 滑块视图类:SlideImageView.java.实现小视频APP源码随机选取拼图位置,对拼图位置进行验证等功能. public c ...

  2. 小视频app源码开发不可忽视的重点在这里

    小视频app适合各种移动场景下的用户参与,以内容为卖点,通过大数据功能筛选市场喜爱的视频,实际操作简单,容易引发二次传播,且变现模式成熟,因此,在抖音.微信等小视频app的刺激下,小视频app源码开发 ...

  3. 小视频app源码无障碍服务实现自动跳过APP启动页广告

    小视频app源码无障碍服务实现自动跳过APP启动页广告实现的相关代码 一. res目录下新建xml文件夹新建文件accessibility.xml <?xml version="1.0 ...

  4. 小视频APP源码开发者对小视频平台的三个忠告

    在这个短视频APP火爆的时代,小视频APP源码供不应求,无数人都想进来掺和一脚,因此无数短视频APP层出不穷,质量也是参差不齐,在此,我作为一个小视频APP开发人员,向各位想要开发短视频APP的朋友们 ...

  5. 短视频源码,成品短视频app源码搭建第一步

    随着短视频平台的兴起,短视频app也成为了移动应用市场的一大风口.开发一款成品的短视频app需要大量的资源和时间,而使用现成的小视频app源码则可以快速地搭建出一个基础功能完备的短视频app.本文将介 ...

  6. java修改动态视频,直播视频app源码,动态修改cron

    直播视频app源码,动态修改cron相关的代码 package com.chashiyu.task.dynamic; import org.springframework.beans.factory. ...

  7. 短视频app源码、小视频源码存储功能如何实现?

    在短视频app源码(小视频源码)开发中,考虑到后期用户上传短视频时需要大量应用到存储功能,故而需要实现这一功能,具体需要怎么做呢,本文将以云豹短视频app源码为例,为大家进行讲解. 一.阅读前请注意: ...

  8. 仿抖音短视频APP源码如何开发抖音类似特效

    仿抖音短视频APP源码如何开发抖音类似特效 1.特效概览 特效列表 特效列表 2.『灵魂出窍』 抖音的实现效果如下: 灵魂出窍 我的实现效果如下: ezgif.com-rotate.gif 代码实现 ...

  9. 官方教程之短视频app源码接入openinstall实现免填邀请码功能

    短视频app源码在上线后,为了实现大规模推广,会开发用户邀请的功能.用户邀请新用户进行注册,建立上下级关系后,邀请用户可以获得短视频app源码的奖励.为了防止新用户注册后,不填写邀请码,短视频app源 ...

最新文章

  1. K-近邻算法之特征工程-特征预处理
  2. ElasticSearch+聚合+Aggregation+示例
  3. mysql mgr 5.6_mysql MGR高可用配置
  4. Spark SQL 之SQLContext(二)
  5. linux的vi命令详解,Linux上Vi命令详解
  6. 【BZOJ1236】KPSUM,记数类问题(乱搞)
  7. 为 ASP.NET 创建缓存配置对象[转载]
  8. 软件测试用例.范文,软件测试用例模板范文
  9. Q版周鸿祎:带你2分钟看懂互联网+
  10. idea配置java环境视频教程_【IDEA】JavaWeb教程--环境搭建
  11. 花式讲解校园网绕过认证原理
  12. 【资讯】时间的朋友2017跨年演讲全回顾
  13. 苹果app退款_??充值消费退款
  14. VS2008向工具箱中添加控件解决 未能实例化 设计时授权
  15. Intellij IDEA - Did you kown...?
  16. CMOS图像传感器——深入ISO
  17. matlab 怎样画颜色渐变曲线
  18. 支持历史阅读记录的PDF阅读工具
  19. 王者荣耀最低战力查询接口
  20. 微电网优化调度|农村农业区可再生能源微电网优化调度(Python代码实现)

热门文章

  1. [MIX] 吉他独奏学习
  2. 如何用3D技术“复现”遗址?
  3. “速课小龙”项目冲刺4
  4. 如何写出漂亮的有可读性的微信文案?
  5. 解决screen状态为Attached连上不的问题
  6. 假币问题 (java)居然有假币!!!
  7. navicat mysql 存储过程_navicat怎么创建存储过程
  8. 剪枝简述(模型压缩加速篇)
  9. 【无标题】关于机械版CAD零件序号乱了重新排序的问题
  10. 现实版终结者?杀手机器人预计2017年问世