时间:2014-11-27 来源:

图的割点(邻接矩阵实现)【编程语言】

/*
Name: 图的割点(邻接矩阵) 
Copyright: 
Author: 巧若拙 
Date: 21-11-14 20:34
Description: 
在一个无向连通图中承接网站前端,如果有一个顶点集合,承接网站前端删除这个顶点集合,html切图报价以及这个集合中所有顶点相关联的边以后团队网页接活,原图变成多个连通块,团队网页接活就称这个点集为割点集合.
求割点与桥的算法是R.Tarjan发明的.对图深度优先搜索,手机网页制作定义DFS(u)为u在搜索树(以下简称为树)中被遍历到的次序号(等价于时间戳).
定义Low(u)为u或u的子树中能通过非父子边追溯到的最早的节点网页切图制作,即DFS序号最小的节点的序号.根据定义,网页切图制作则有:  
Low(u)=Min { DFS(u) ,其中 (u,v)为树枝边(父子边) 
一个顶点u是割点psd切图html,当且仅当满足(1)或(2) :
(1) u为树根,psd切图html且u有多于一个子树. 
(2) u不为树根web外包,v)为树枝边(或称父子边网页切图制作,使得DFS(u)<=Low(v).
本文用邻接矩阵存储图的信息div+css+js切图,实现了递归和非递归两种算法. 
*/
#include<stdio.h>
#include<stdlib.h>


#define MAXN 26   //最大变量(顶点)数量 


typedef char VertexType; //顶点类型由用户自定义
typedef int EdgeType; //边上的权值类型由用户自定义


typedef struct EdgeNode{ //边表结点
int adjvex;  //邻接点域,div+css+js切图存储该顶点对应的下标
// EdgeType weight; //权值,对于非网图可以不需要 
struct EdgeNode *next; //链域,页面div重构指向下一个邻接点 
} EdgeNode;


typedef struct VertexNode{ //顶点表结点
VertexType data; //顶点域psd切图html, int n, int n, int root, int father);//采用深度优先搜索寻找割点(递归算法) 
void CutPoint(VertexNode *GL, int n);//采用深度优先搜索寻找割点(非递归算法) 


int main()
{
int i, n;
VertexNode GL[MAXN];

printf("请输入顶点数量和边数量:\n"); 
scanf("%d%d", &m);

CreateGraph(GL, m);//创建一个图
PrintGraph(GL, m);//输出图

// CutPoint_DFS(GL, 0, 0, i);

printf("\n");

    return 0;
}


void CreateGraph(VertexNode *GL, int m)//创建一个图
{
int i, v;
EdgeNode *e;

for (i=0; i<n; i++)//初始化图 
{
GL[i].data = i;
GL[i].firstEdge = NULL;
num[i] = low[i] = flag[i] = 0;
}

for (i=0; i<m; i++) //读入边信息(注意是无向图) 
{
scanf("%d%d", &v);

e = (EdgeNode*)malloc(sizeof(EdgeNode)); //采用头插法插入边表结点 
if (!e)
{
puts("Error"); 
exit(1);
}
e->next = GL[u].firstEdge;
GL[u].firstEdge = e;
e->adjvex = v;

e = (EdgeNode*)malloc(sizeof(EdgeNode)); //采用头插法插入边表结点 
if (!e)
{
puts("Error"); 
exit(1);
}
e->next = GL[v].firstEdge;
GL[v].firstEdge = e;
e->adjvex = u;
}



void PrintGraph(VertexNode *GL, int m)//输出图
{
int i, i);
e = GL[i].firstEdge;
while (e)
{
printf("<%d, ", e->adjvex);
e = e->next;
}
printf("\n");
}
printf("\n");

 
void CutPoint_DFS(VertexNode *GL, int cur, root, cur);

low[cur] = (low[cur] < low[e->adjvex]) ? low[cur] : low[e->adjvex];//取最小值 

if ((cur != root && num[cur] <= low[e->adjvex])
|| (cur == root && child == 2))
{
flag[cur] = 1;
}

else if (e->adjvex != father) //与旁系祖先有连接网页切图制作,其实也可以不加这个限制条件,网页切图制作因为如果父亲是自己则low[cur]值不变 
{
low[cur] = (low[cur] < num[e->adjvex]) ? low[cur] : num[e->adjvex];//取最小值 


e = e->next;
}
}


void CutPoint(VertexNode *GL, int n)//采用深度优先搜索寻找割点(非递归算法) 
{
int Stack[MAXN]; //用来存储当前被处理顶点的栈 
EdgeNode *SF[MAXN], v, top = 0;

for (u=0; u<n; u++)//初始化SF 
SF[u] = GL[u].firstEdge;

Stack[top] = root;
num[root] = low[root] = ++index;
while (top >= 0)
{
e = SF[Stack[top]];
if (e)
{
SF[Stack[top]] = e->next; //指向下一条边 
if (num[e->adjvex] == 0)
{
child[Stack[top]]++;
Stack[++top] = e->adjvex;
low[e->adjvex] = num[e->adjvex] = ++index;
}
else
{
low[Stack[top]] = (low[Stack[top]] < num[e->adjvex]) ? low[Stack[top]] : num[e->adjvex];//取最小值
}
}
else
{
if (top > 0)
{
u = Stack[top-1];
v = Stack[top];
low[u] = (low[u] < low[v]) ? low[u] : low[v];
if ((u != root && low[v] >= num[u])
|| (u == root && child[u] == 2))
{
flag[u] = 1;
}
}
top--;
}
}
}
点击次数:4839
作者:
web前端行业资讯
Web new NewsList
英特尔宣布与法拉利跨界合作欲将AI技术用于赛车运动 ,,2018年01月11日甲骨文服务器出漏洞:攻击者用漏洞挖矿获取加密货币 ,,2018年01月11日用深度学习设计图像视频压缩算法:更简洁、更强大 ,,2018年01月11日Ubuntu内核和NVIDIA更新:修复Meltdown和Spectre两处漏洞 ,,2018年01月11日AntDesign3.1.1发布,阿里企业级UI设计语言 ,,2018年01月11日微信「跳一跳」带火小游戏,开发者如何快速上手? ,,2018年01月11日谷歌公布最新安卓系统份额:你用上奥利奥了么? ,,2018年01月11日腾讯开发出“3D音效”算法:普通耳机实现3D实时语音效果 ,,2018年01月11日谷歌工程师点赞中国程序员实现Node.js启动超4倍提速 ,,2018年01月11日三星电子总裁兼CE部门负责人金炫奭:万物互联时代到来 ,,2018年01月11日NVIDIA和大众合作建立智能驾驶助手 ,,2018年01月11日GIMPS项目报告发现已知最大素数 ,,2018年01月11日微软与生物技术公司开展AI驱动的血液检测同时诊断数十种疾病 ,,2018年01月11日微软跨平台移动开发工具套件HockeyApp宣布免费 ,,2018年01月11日《硅谷》里神乎其神的压缩技术,AI正在一点点做出来 ,,2018年01月11日LinuxMint19代号敲定为“Tara”预计2018年5月至6月期间发布 ,,2018年01月11日Facebook发布wav2letter工具包,用于端到端自动语音识别 ,,2018年01月11日开源数据库ArangoDB正进行约1156万美元股权融资 ,,2018年01月11日IntelCPU漏洞闹大:腾讯云紧急升级 ,,2018年01月11日2018年1月全球数据库排名:Redis夺回第八 ,,2018年01月11日Lyft将联手无人驾驶公司于CES上展示无人驾驶汽车 ,,2018年01月11日京东X无人超市首家社会门店开业:刷脸进、微信自动结算 ,,2018年01月11日担心被AI取代是杞人忧天?高晓松跨年演讲说的有几分对 ,,2018年01月11日免费授权技术许可Intel宣布在未来CPU中集成雷电3 ,,2018年01月11日算法决定你在社交媒体上看到的信息 ,,2018年01月11日谷歌安全博客披露“英特尔内核漏洞”更多细节 ,,2018年01月04日Postgres10开发者新特性 ,,2017年12月28日阿里巴巴、狗尾草、苏大联合论文:基于对抗学习的众包标注用于中文命名实体识别 ,,2017年12月28日柯洁的2017:20岁,与AI斗与人类斗,其乐无穷 ,,2017年12月28日如果机器人拥有痛觉,这个世界会有哪些不一样? ,,2017年12月28日POJ3616——MilkingTime 【编程语言】2014年12月01日【C++设计模式】adapter适配器模式 【Web前端】2015年07月23日CodeforcesRound#289(Div.2,ACMICPCRules)(A,B,C,E)【移动开发】2015年02月02日u-boot-2014.10移植第12天----深入分析代码(七) 【编程语言】2015年02月03日ConvolutionalNeuralNetworksforVisualRecognition4【编程语言】2015年06月24日ubuntu安装flash插件 【编程语言】2015年08月15日Microsoftword中的题注修改后更新的问题 【编程语言】2015年03月30日编写网页木马详解2014年01月29日javascript把秒转换成HH-MM-SS时间格式 【编程语言】2014年12月04日LeetcodeBestTimetoBuyandSellStockII【架构设计】2015年07月07日数据库之Oracle的下载与安装【入门必修】 【移动开发】2015年08月05日Sicily7151.1758!2015年04月01日Memcached使用总结 【数据库】2015年05月07日Android跨进程访问(AIDL服务) 【综合】2015年08月17日POJ-1326【研发管理】2015年08月29日javaJDBC链接hive操作实例 【综合】2014年12月09日ORACLE记录连接用户的IP地址以及登录失败用户的IP地址【架构设计】2015年05月18日半同步半反应堆线程池实现 【编程语言】2015年07月07日【CODEVS3037】线段覆盖5 【编程语言】2015年02月25日bzoj1208splay伸展树【编程语言】2015年05月27日少年DXH【移动开发】2015年07月24日Win7下搭建JAVA并行开发环境MPJExpress(PART1) 【互联网】2015年04月24日Go语言错误处理小例子 【移动开发】2015年02月27日感知器算法(二分类问题) 【移动开发】2014年11月07日cvCreateMTStumpClassifier计算最优弱分类器的代码总体思路 【移动开发】2015年06月11日长沙市护照港澳通行证办理【编程语言】2015年06月11日IOS开发笔记——单例模式 【编程语言】2015年02月15日网页程序开机启动并自动全屏【编程语言】2015年02月02日python1:布尔类型 【研发管理】2015年03月24日三星新款Chromebook支持触控笔和Android应用 ,,2017年01月05日
我们保证
We guarantee
> psd效果文件手工切图,保证图片效果最好体积最小利于传输
> 100%手写的HTML(DIV+CSS)编码,绝对符合W3C标准
> 代码精简、css沉余量小、搜索引擎扫描迅速,网页打开快捷
> 应用Css Sprite能够减少HTTP请求数,提高网页性能
> 跨浏览器兼容(IE6、7、8、9,Firefox火狐,Chrome谷歌)