📄 maareord.cpp
字号:
//************************************************************************
// maareord - Optimal Matrix Reordering For Asymmetric Matrix
//************************************************************************
#include <malib.h>
int comp_col(const void *,const void * );
//************************************************************************
int EmsMatrix::maareord(void)
{
struct mastatest *col_mastatept;
struct maamtrxst *tmp_cmtrxpt;
int rc = SUCCESS;
int col_itm = 1, count;
int i, j;
cmtrxft =(char *)new struct maamtrxst[nmaamtrx];
cmtrxpt =(struct maamtrxst *)cmtrxft;
for ( i = 1; i<= nmastate && rc == SUCCESS; i++)
{
maorderpt = maorder_vt[i-1];
mastatept = mastate_vt[maorderpt->mastate_itm - 1];
if ( mastatept->maorder_itm == i )
{
if ( mastatept->maamtrx_itm != 0 )
{
//maamtrxpt = maamtrx_vt[mastatept->maamtrx_itm - 1];
count = mastatept->maamtrx_cnt;
tmp_cmtrxpt = cmtrxpt;
for ( j = 1; j <= count; j++)
{
maamtrxpt = maamtrx_vt[j+mastatept->maamtrx_itm - 2];
col_mastatept = mastate_vt[maamtrxpt->colitm - 1];
cmtrxpt->rowitm = i;
cmtrxpt->colitm = col_mastatept->maorder_itm;
cmtrxpt->element = maamtrxpt->element;
cmtrxpt->g = maamtrxpt->g;
cmtrxpt++;
}
if ( count > 1 ) // sort columns for the state
qsort(tmp_cmtrxpt,count, sizeof(struct maamtrxst),&comp_col);
maorderpt->cmtrxitm = col_itm;
maorderpt->cmtrxcnt = count;
col_itm += count;
}
}
else
{
rc = !SUCCESS;
printf("maareord: invalid order/state linkages for asmaorder item #%4u\n",i);
}
}
return( rc );
}
//************************************************************************
// comp_col - comparing columns for the state
//************************************************************************
int comp_col(const void *pt1, const void *pt2)
{
struct maamtrxst *it1pt = (struct maamtrxst *)pt1, *it2pt = (struct maamtrxst *)pt2;
return( it1pt->colitm <it2pt->colitm );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -