资源简介
根据邻接矩阵求可达矩阵,再求可达结合和先行集合及交集。
代码片段和文件信息
#include
int a[5][5]={{00000}{00110}{10010}{00101}{10000}};
int b[5][5]={{10000}{01000}{00100}{00010}{00001}};
int c[5][5]={0};//每次都乘以C[][]
int e[5][5]={0};//存放(A+I)的n次方的结果,用于与(A+I)的n+1次方比较
int d[5][5]={0};
//函数声明
void f1(); //求(a+i)的n次方
int f2(int e[][5]int d[][5]);//判断两个矩阵是否相等
void f3(int a[][5]int b[][5]);//一个矩阵的值赋给另外一个矩阵存起来
void f4();//求可达集合和先行集合
void f5();//层级数
void f6(int m);//删除其中相等的元素或集合
void main()
{
for(int i=0;i<5;i++)
for(int j=0;j<5;j++)
c[i][j]=a[i][j]>=b[i][j] ? a[i][j] : b[i][j];
f3(ec);
printf(“输出原始邻接矩阵和单位矩阵的布尔加法\n“);
for(i=0;i<5;i++)
{
for(int j=0;j<5;j++)
printf(“%d “e[i][j]);
printf(“\n“);
}
f3(dc);
f1();
while(f2(ed)!=1)//如果两个矩阵不相等,则继续调用f1();让d[][]*c[][];直到他们相等,则跳出循环
f1();
printf(“输出可达矩阵:\n“);
for(i=0;i<5;i++)
{
for(int j=0;j<5;j++)
printf(“%d “d[i][j]);
printf(“\n“);
}
f4();
f5();
}
void f1() //求(a+i)的n次方
{
f3(ed);//此处先把上次乘出的值存放在e[][]中,用于下次比较
for(int i=0;i<5;i++)
for(int j=0;j<5;j++)
for(int k=0;k<5;k++)
{
int t=e[i][k]*c[k][j];
d[i][j]=d[i][j]>=t ? d[i][j] : t;
}
}
int f2(int e[][5]int d[][5])//判断两个矩阵是否相等
{
for(int i=0;i<5;i++)
for(int j=0;j<5;j++)
if(e[i][j]!=d[i][j])
{
return 0;
break;
}
return 1;
}
void f3(int a[][5]int b[][5])//一个矩阵的值赋给另外一个矩阵存起来
{
for(int i=0;i<5;i++)
for(int j=0;j<5;j++)
a[i][j]=b[i][j];
}
//a[][]用来存放可达集合 b[][]用来存放先行集合 c[][]用来存放可达集合与先行集合的交集
void f4()//求可达集合和先行集合
{
for(int i=0;i<5;i++)//求可达集合对于行来说,就是可达集合
for(int j=0;j<5;j++)
if(d[i][j]==1)
a[i][j]=j+1;
for(int j=0;j<5;j++)//求先行集合对于列来说,就是先行集合
for(int i=0;i<5;i++)
if(d[i][j]==1)
b[i][j]=i+1;
for(i=0;i<5;i++)//求转置矩阵
{
int t;
for(int j=0;j {
t=b[i][j];
b[i][j]=b[j][i];
b[j][i]=t;
}
}
for(i=0;i<5;i++)
for(int j=0;j<5;j++)
c[i][j]=0;//将c[][]矩阵清零,用来存放可达集合与先行集合的交集
for(i=0;i<5;i++)
for(int j=0;j<5;j++)
{
if(a[i][j]==b[i][j])
{
c[i][j]=a[i][j];
}
}
/*
printf(“输出 可达集合 先行集合 可达集合与先行集合的交集\n“);
for(i=0;i<5;i++)
{
printf(“第%d 行: “i+1);
for(int j=0;j<5;j++)
printf(“%d “a[i][j]);
printf(“ “);
for(j=0;j<5;j++)
printf(“%d “b[i][j]);
printf(“ “);
for(j=0;j<5;j++)
printf(“%d “c[i][j]);
printf(“\n“);
}
*/
for(i=0;i<5;i++)
{
printf(“第%d 行: “i+1);
for(int j=0;j<5;j++)
if(a[i][j]!=0)
printf(“%d “a[i][j]);
else
printf(“ “);
printf(“ “);
for(j=0;j<5;j++)
if(b[i][j]!=0)
printf(“%d “b[i][j]);
else
printf(“ “);
printf(“ “);
for(j=0;j<5;j++)
if(c[i][j]!=0)
printf(“%d “c[i][j]);
else
printf(“ “);
printf(“\n“);
}//此处输出时二者选择其一。
}
void f5()//求层级数
{
printf(“输出每一层的层级数\n“);
int t=1;
for(int n=0;n<5;n++)
for(int i=0;i<5;i++)
{
int flag=1;
int m=0;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 43622 2010-09-07 10:40 ISM\0000.jpg
文件 176211 2010-09-11 23:26 ISM\Debug\ism.exe
文件 182812 2010-09-11 23:26 ISM\Debug\ism.ilk
文件 12840 2010-09-11 23:26 ISM\Debug\ism.obj
文件 203724 2010-09-11 23:25 ISM\Debug\ism.pch
文件 435200 2010-09-11 23:26 ISM\Debug\ism.pdb
文件 41984 2010-09-11 23:27 ISM\Debug\vc60.idb
文件 45056 2010-09-11 23:26 ISM\Debug\vc60.pdb
文件 43622 2010-09-07 10:40 ISM\ISM\0000.jpg
文件 176211 2010-09-11 23:26 ISM\ISM\Debug\ism.exe
文件 182812 2010-09-11 23:26 ISM\ISM\Debug\ism.ilk
文件 12840 2010-09-11 23:26 ISM\ISM\Debug\ism.obj
文件 203724 2010-09-11 23:25 ISM\ISM\Debug\ism.pch
文件 435200 2010-09-11 23:26 ISM\ISM\Debug\ism.pdb
文件 41984 2010-09-11 23:26 ISM\ISM\Debug\vc60.idb
文件 45056 2010-09-11 23:26 ISM\ISM\Debug\vc60.pdb
文件 4703 2010-09-11 23:26 ISM\ISM\ism.cpp
文件 3365 2010-09-05 11:58 ISM\ISM\ism.dsp
文件 531 2010-09-05 12:04 ISM\ISM\ism.dsw
文件 677 2008-11-22 23:13 ISM\ISM\ism.h
文件 41984 2010-09-11 23:26 ISM\ISM\ism.ncb
文件 53760 2010-09-11 23:26 ISM\ISM\ism.opt
文件 1126 2010-09-11 23:26 ISM\ISM\ism.plg
文件 127 2008-10-11 18:31 ISM\ISM\relation.txt
文件 5443 2008-11-22 23:14 ISM\ISM\solution.txt
..A.SH. 9728 2010-09-06 11:30 ISM\ISM\Thumbs.db
文件 4703 2010-09-11 23:26 ISM\ism.cpp
文件 3365 2010-09-11 23:27 ISM\ism.dsp
文件 531 2010-09-11 23:27 ISM\ism.dsw
文件 41984 2010-09-11 23:27 ISM\ism.ncb
............此处省略10个文件信息
- 上一篇:课程表排课源代码四川大学数据结构与算法满分作业
- 下一篇:C++ 创建读写PDF
相关资源
- 数据结构图的邻接矩阵功能实现
- fp增长树算法的C/C++实现
- 无向图用邻接矩阵的深度优先遍历程
- C/C++仿真实现Linux文件系统
- 无向图的邻接矩阵压缩存储.cpp
- 图像处理 梯度锐化 C/C++语言实现
- Linux环境下C语言Socket编程——客户端
- 生产者消费者问题C/C++源程序
- c/c++ 最速下降法计算最优值 利用ar
- 校园失物招领管理系统.rar
- 酒店管理系统源码完整版C++
- 简易的VC++点对点文件传输
- Matlab笔记——使用GPU运算、调用C/C+
- 离散弗雷歇Frechet距离 C/C++
- c/c++ 字符集 gbk/utf8互转,Ansi/Utf8互转
- 宇视科技2017C/C++开发笔试题
- c/c++中文帮助文档API
- Demo: c/c++动态库DLL调用,c#等其他语言
- C利用循环左移函数流水灯
- C/C++结构体序列化配置模板化
- SHA-3keccak之C/C++官方源码
- Ubuntu下最简单的Cmake编译多个C和C++工
- MATLAB模糊控制器*.fisC/C++接口文件
- 迷宫求解含源代码
- C++控制Windows桌面切换
- C语言windowlinux平台的SNTP实现
- 应用C/C++语言编写灰度图像霍夫曼编码
- C/C++/STL帮助手册 chm完整离线版
- C++程序设计语言:第1~3部分原书第4版
- 邻接表与邻接矩阵互换代码
评论
共有 条评论