📄 可达性矩阵划分.cpp
字号:
//可达性矩阵划分的应用程序;
#include "iostream.h"
#include "iomanip.h"
void main()
{
int n=0;
int s,k,i,j,l;
cout<<"请输入所要划分区域的单元数:"<<endl;
cin>>n;
int *C,*G;
int **M=new int*[n+1];//申请n+1维的空间,从标号1开始;
int **L=new int*[n+1];
for(s=0;s<=n;s++)
{
M[s]=new int[n+1];
}
cout<<"请输入区域内单元可达性矩阵:"<<endl;
for(s=1;s<=n;s++) ///为M阵赋值
for(k=1;k<=n;k++)
{
cin>>M[s][k];
}
for(s=0;s<=n;s++)
{
L[s]=new int[n+1];
}
for(s=1;s<=n;s++)//初始化L阵
for(k=1;k<=n;k++)
{
L[s][k]=0;
}
G=new int[n+1];
C=new int[n+1];
cout<<"请输入各单元在区域中的初始顺序"<<endl;
for(k=1;k<=n;k++)
{
cin>>C[k];
}
for(k=1;k<=n;k++)
{
G[k]=1;
}
int LE;
int IP;
for(LE=1;LE<=n;LE++)
{
IP=0;
for(k=1;k<=n;k++)
{
i=C[k];
for(l=1;l<=n;l++)
{
j=C[l];
if(!(M[i][j]<=M[j][i]))
break;
else
continue;
}
if(!(M[i][j]<=M[j][i]))///满足该条件即执行大循环,跳过剩下语句
continue;
IP=IP+1;
L[LE][IP]=C[k];
G[k]=-G[k];
}
int JP=0;
for(k=1;k<=n;k++)
{
if(G[k]<0)
continue;
else
{
JP=JP+1;
C[JP]=C[k];
G[JP]=G[k];
}
}
n=JP;
if(n==0)
break;
else
continue;
}
int I,J;
cout<<"请输入级别I,单元标号J:"<<endl;
cin>>I>>J;
cout<<"第"<<I<<"级上的第"<<J<<"个单元的编号L("<<I<<","<<J<<")为:";
if(L[I][J]==0)
cout<<"对不起,不存在这样级别的单元!"<<endl;
else
cout<<L[I][J];
cout<<endl;
for(s=0;s<=n;s++)
{
delete []M[s];
delete []L[s];
}
delete []C;
delete []G;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -