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

自己做网站可以揽业务吗美发培训职业学校

自己做网站可以揽业务吗,美发培训职业学校,网站建设制作设计营销 广州,建设自己公司的网站首页图的存储方法有两种,首先就是邻接矩阵 那,什么是邻接矩阵呢,邻接矩阵就是用一个二维数组存储两个结点的邻接关系的一个矩阵 光说可能有的人不懂,我们在图上解释吧 如图,结点之间没有边的地方全部设为无穷大&#xf…

图的存储方法有两种,首先就是邻接矩阵

那,什么是邻接矩阵呢,邻接矩阵就是用一个二维数组存储两个结点的邻接关系的一个矩阵

光说可能有的人不懂,我们在图上解释吧

如图,结点之间没有边的地方全部设为无穷大,1,2表示1到2有一个边,权值就是a[1][2],无向图的话,a[1][2]存一个权值,a[2][1]要存相同的权值;

这就是邻接矩阵,把所有结点之间边的情况存在一个二维数组里,这个二维数组的大小应该是a[N][N] N表示结点个数

也就是空间复杂度为n²,n为结点个数,跟边数无关,适合存储边数多的图,也就是稠密图

#include <iostream>
using namespace std;
const int N = 1010;
int n,m;
int edges[N][N];
int main()
{int n,m;cin >> n >> m;//结点个数和边的个数 //刚开始的时候设置每个结点之间都没有边,嗯。。就设成负无穷好了memset(edges,-0x3f,sizeof edges);for(int i = 1;i<=m;i++){int a,b,c;cin >> a >> b >> c;//ab表示两个结点edges[a][b] = c;edges[b][a] = c;//如果是无向边,相反的情况也要存一下 }	return 0;
}

另一种存储方式就是邻接表了,这种存储方式就是开一个vector数组,然后每个结点都把他有边的结点存起来,但是,光存结点肯定是不行的,这时候我们可以用一个pair类型来存另一个结点以及边的权值

这个就很像我们之前学树的时候的孩子表示法

#include <iostream>
#include <vector>
using namespace std;
const int N = 1010;
int n,m;
typedef pair<int,int> PII;
vector <PII> edges[N];
int main()
{int n,m;cin >> n >> m;//结点个数和边的个数 for(int i = 1;i<=m;i++){int a,b,c;cin >> a >> b >> c;//ab表示两个结点edges[a].push_back({b,c});edges[b].push_back({a,c});}	return 0;
}

当然啦,我们的邻接表除了这种形式存之外,还有别的存储方式,我们还可以用链式前向星来存储

#include <iostream>
#include <vector>
using namespace std;
const int N = 1010;
int n,m;
int h[N],e[2*N],ne[2*N],w[N*2],id;
void add(int a,int b,int c) //把b结点头插到a结点后面的链表里
{id++;e[id] = b;ne[id] = h[a];h[a]=id;w[id] = c;} 
int main()
{int n,m;cin >> n >> m;//结点个数和边的个数 for(int i = 1;i<=m;i++){int a,b,c;cin >> a >> b >> c;//ab表示两个结点add(a,b,c);//把b头插到a的结点里面  add(b,a,c);//把a头插到b的结点里面 }	return 0;
}

好的,这就是我们的几种存储方法,接下来我们还得继续介绍一下图是怎么遍历的

老样子,我们还是分为dfs和bfs遍历

我们先说一下dfs

一路走到黑我们先看邻接矩阵怎么遍历

#include <iostream>
using namespace std;const int N = 5001;
bool st[N];
int edges[N][N];
void dfs(int u)
{cout << u << " ";st[u] = true;for(int v = 1;v<=n;v++){if(edges[u][v]!=-1 && !st[v]){dfs(v);}} 
}
int main()
{int n,m; cin >> n >> m;memset(edges,-1,sizeof(edges));for(int i = 1;i<=m;i++){int a,b,c;cin >> a >> b >> c;edges[a][b] = c;edges[b][a] = c;}return 0;
}

接下来看看邻接表怎么遍历

#include <iostream>
#include <vector>
using namespace std;const int N = 5001;
typedef pair<int,int> PII;
bool st[N];
vector <PII> ret[N];
void dfs(int u)
{cout << u << " ";st[u] = true;for(auto &e : ret[u]){int x = e.first,y = e.second;//x就是连接u的一条边,y就是权值if(!st[x]){dfs(x);} }
}
int main()
{int n,m; cin >> n >> m;for(int i = 1;i<=m;i++){int a,b,c;cin >> a >> b >> c;ret[a].push_back({b,c});ret[b].push_back({a,c});}return 0;
}

链式前向星的dfs

#include <iostream>
#include <vector>
using namespace std;
const int N = 1010;
int n,m;
bool st[N];
int h[N],e[2*N],ne[2*N],w[N*2],id;
void add(int a,int b,int c) //把b结点头插到a结点后面的链表里
{id++;e[id] = b;ne[id] = h[a];h[a]=id;w[id] = c;} void dfs(int u){cout << u << " ";st[u] = true;for(int v = h[u];v;v=ne[v]){int x = e[v];if(!st[x]){dfs(x);}}}
int main()
{int n,m;cin >> n >> m;//结点个数和边的个数 for(int i = 1;i<=m;i++){int a,b,c;cin >> a >> b >> c;//ab表示两个结点add(a,b,c);//把b头插到a的结点里面  add(b,a,c);//把a头插到b的结点里面 }	return 0;
}

http://www.dtcms.com/wzjs/481763.html

相关文章:

  • 一个主机域名可以做多少个网站推广方式有哪些
  • 西安百度seo关键词优化技术
  • 织梦后台怎么做网站地图seo优化论坛
  • 网站建设毕业设计千锋教育官网
  • 网站安全建设 需求分析网站搭建服务
  • 黑龙江建设网证书查询三类人员佛山seo关键词排名
  • 四川住房和城乡建设厅网站不能打开竞价什么意思
  • 找个人给我做电影网站好百度网盘搜索入口
  • 温州网站建设方案书百度免费推广登录入口
  • 网站开发用 c php今日军事新闻最新消息新闻
  • 学交互设计网站2020做seo还有出路吗
  • 麻章网站建设公司网站推广app软件
  • 安徽网站开发建设关键词全网搜索
  • 用什么软件做网站布局seo站长
  • seo网站建设接单南昌企业网站建设
  • 学做美食网站哪个好火星培训机构收费明细
  • 大英哪里有做网站的黑帽seo工具
  • 购物网站建设过程什么软件比百度搜索好
  • 网站开发做什么的大连seo关键词排名
  • 仿克米设计网站免费二级域名分发
  • 网站开发和竞价百度快照是什么意思
  • 网站不让百度收录推广如何做网上引流
  • 寻找网站建设 网站外包搭建网站工具
  • 松江做网站需要多少钱最好的搜索引擎
  • 台式机做网站服务器seo域名如何优化
  • 网站网络安全怎么做站长统计免费下载
  • 开源b2b网站源码建设seo基础知识包括什么
  • 怎么注册自己网站吗互动营销经典案例
  • 携程网站 建设平台分析平台交易网
  • 12306网站是谁做的seo优化方式