資源簡介
根據鄰接矩陣求可達矩陣,再求可達結合和先行集合及交集。

代碼片段和文件信息
#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
評論
共有 條評論