图---存储方式一
来源:互联网 发布:神木法院淘宝网下载 编辑:程序博客网 时间:2024/06/03 16:47
推荐博客
图:
有好多种存储方式,大家最熟悉的应该是二维数组存储的矩阵的存储方式。
1.邻接矩阵
2.邻接表、逆邻接表
3.十字链表
4邻接多重表:
iVex和jVex是与某条边依附的两个顶点在顶点表中的下标。iLink指向依附顶点iVex的下一条边,jLink指向依附顶点jVex的下一条边。
也就是说在邻接多重表里边,边表存放的是一条边,而不是一个顶点。
5.边集数组:
边集数组是由两个一维数组构成,一个是存储顶点的信息,另一个是存储边的信息,这个边数组每个数据元素由一条边的起点下标(begin)、终点下标(end)和权(weight)组成。
下面介绍的是常见的前三种表示方法:
一、邻接矩阵:
#include <stdio.h>#include <stdlib.h>#include <curses.h>#define MAXN 121#define INF 1212121//代表无穷大typedef char V;//定义顶点类型typedef int E;//边上的权值typedef struct { V v[MAXN]; E e[MAXN][MAXN]; int numv, nume;//定点数,边数}Graph;Graph g;void Initial()//矩阵的初始化{ for(int i=0;i<g->nume;i++) { for(int j=0;j<g->nume;j++) { g->E[i][j] = INF; } }}
图的基本存储的基本方式一
Time Limit: 1500MS Memory Limit: 65536KB
Submit Statistic
Problem Description
解决图论问题,首先就要思考用什么样的方式存储图。但是小鑫却怎么也弄不明白如何存图才能有利于解决问题。你能帮他解决这个问题么?
Input
多组输入,到文件结尾。
每一组第一行有两个数n、m表示n个点,m条有向边。接下来有m行,每行两个数u、v代表u到v有一条有向边。第m+2行有一个数q代表询问次数,接下来q行每行有一个询问,输入两个数为a,b。
注意:点的编号为0~n-1,2<=n<=5000 ,n*(n-1)/2<=m<=n*(n-1),0<=q<=1000000,a!=b,输入保证没有自环和重边
Output
对于每一条询问,输出一行。若a到b可以直接连通输出Yes,否则输出No。
Example Input
2 1
0 1
2
0 1
1 0
Example Output
Yes
No
Hint
Author
lin
#include <bits/stdc++.h>using namespace std;bool map1[5000][5000];int main(){ int n, m, x, y, a; while(scanf("%d %d",&n, &m)!=EOF) { memset(map1, 0, sizeof(map1)); while(m--) { scanf("%d %d", &x,&y); map1[x][y] = 1;//题目中为有向边 } scanf("%d", &a); while(a--) { scanf("%d %d", &x, &y); if(map1[x][y]==1) printf("Yes\n"); else printf("No\n"); } } return 0;}
oj上有bug 吧~
必须用bool型,然后数组不能开的太大,不然超时~
不知道为甚么,上面的代码还是超时(即使是当时AC的~)
改了改~
下面是AC的,以及比较,多提交几次,应该就AC了~~~
#include <bits/stdc++.h>using namespace std;bool map1[5000][5000];int main(){ int n, m, x, y, a; while(~scanf("%d %d",&n, &m)) { for(int i=0;i<n;i++) for(int j=0;j<n;j++) map1[i][j] = false; while(m--) { scanf("%d %d", &x,&y); map1[x][y] = true; } scanf("%d", &a); while(a--) { scanf("%d %d", &x, &y); if(map1[x][y]) printf("Yes\n"); else printf("No\n"); } } return 0;}
神奇!!!
#include <bits/stdc++.h>using namespace std;bool map1[5000][5000];int main(){ int n, m, x, y, a; while(~scanf("%d %d",&n, &m)) { for(int i=0;i<n;i++) for(int j=0;j<n;j++) map1[i][j] = false; while(m--) { scanf("%d %d", &x,&y); map1[x][y] = true; } scanf("%d", &a); while(a--) { scanf("%d %d", &x, &y); if(map1[x][y]) printf("Yes\n"); else printf("No\n"); } } return 0;}/***************************************************User name: Result: Time Limit ExceededTake time: 1510msTake Memory: 0KBSubmit time: ****************************************************/
#include <bits/stdc++.h>using namespace std;bool map1[5000][5000];int main(){ int n, m, x, y, a; while(~scanf("%d %d",&n, &m)) { for(int i=0;i<n;i++) for(int j=0;j<n;j++) map1[i][j] = false; while(m--) { scanf("%d %d", &x,&y); map1[x][y] = true; } scanf("%d", &a); while(a--) { scanf("%d %d", &x, &y); if(map1[x][y]) printf("Yes\n"); else printf("No\n"); } } return 0;}/***************************************************User name:Result: AcceptedTake time: 1496msTake Memory: 2140KBSubmit time: ****************************************************/
- 图---存储方式一
- 图的存储方式一
- 存储方式一:SharedPreferences
- 存储方式一----------------plist的存储
- 图的基本存储的基本方式一 邻接矩阵
- SDUT 3116 图的基本存储的基本方式一
- 图的基本存储的基本方式一
- sdut oj图的基本存储的基本方式一
- 图的基本存储的基本方式一
- 图的基本存储的基本方式一
- 图的基本存储的基本方式一
- 图的基本存储的基本方式一
- 图的基本存储的基本方式一 邻接矩阵
- 图的基本存储的基本方式一
- 图的基本存储的基本方式一
- 图的基本存储的基本方式一
- 图的基本存储的基本方式一 邻接矩阵
- sdutacm-图的基本存储的基本方式一
- Okabe and El Psy Kongroo CodeForces
- 考核题整理
- Ajax核心对象 XMLHTTPRequest
- 业务订单分库分表二-扩容
- 水晶宫发布2017-18赛季客场球衣
- 图---存储方式一
- maven打包方式
- 可变参数列表解析
- 【Javascript笔记】1.2 Javascript使用形式
- POJ 1426 Find The Multiple
- input框清空
- 初始java (ki)
- vb.net 教程 12-3 HtmlElement类 6
- 06.19 MySQL数据库主从复制服务及优化(高级)