ÑÏεÃôCÓïÑÔ°æ¡¶Êý¾Ý½á¹¹¡·Ï°Ì⼯´ð°¸ ÏÂÔØ±¾ÎÄ

·ÖÎö:±¾Ìâ»ù±¾Ë¼Â·ÓëÉÏÌâͬ.ΨһµÄÇø±ðÊÇ,ÓÉÓÚA,B»¥²»Ïàͬ,Òò´ËB²»½öÒªÏòÓÒ´íλ,¶øÇÒ»¹ÒªÏò×ó´íλ,ÒÔ±£Ö¤²»Â©µôһЩÇé¿ö.µ±BÏà¶ÔÓÚAµÄλÖò»Í¬Ê±,ÐèҪƥÅäµÄÇø¼äµÄ¼ÆË㹫ʽҲ¸÷²»Ïàͬ,Çë¶ÁÕß×Ô¼º»­Í¼ÒÔ°ïÖúÀí½â.±¾Ëã·¨µÄʱ¼ä¸´ÔÓ¶ÈÊÇo£¨strlrn£¨s£©*strlen£¨t£©£©¡£

µÚÎåÕ Êý×éºÍ¹ãÒå±í

5.18

void RSh(int A[n],int k)//°ÑÊý×éAµÄÔªËØÑ­»·ÓÒÒÆkλ,Ö»ÓÃÒ»¸ö¸¨Öú´æ´¢¿Õ¼ä {

for(i=1;i<=k;i++)

if(n%i==0&&k%i==0) p=i;//ÇónºÍkµÄ×î´ó¹«Ô¼Êýp for(i=0;i

j=i;l=(i+n-k)%n;temp=A[i]; while(l!=i) {

A[j]=A[l];

j=l;l=(j+n-k)%n; }// Ñ­»·ÓÒÒÆÒ»²½ A[j]=temp; }//for }//RSh

·ÖÎö:Òª°ÑAµÄÔªËØÑ­»·ÓÒÒÆkλ,ÔòA[0]ÒÆÖÁA[k],A[k]ÒÆÖÁA[2k]......Ö±µ½×îÖջص½A[0].È»¶øÕⲢûÓÐÈ«²¿½â¾öÎÊÌâ,ÒòΪÓпÉÄÜÓеÄÔªËØÔڴ˹ý³ÌÖÐʼÖÕûÓб»·ÃÎʹý,¶øÊDZ»ÌøÁ˹ýÈ¥.·ÖÎö¿ÉÖª,µ±nºÍkµÄ×î´ó¹«Ô¼ÊýΪpʱ,Ö»Òª·Ö±ðÒÔA[0],A[1],...A[p-1]ΪÆðµãÖ´ÐÐÉÏÊöËã·¨,¾Í¿ÉÒÔ±£Ö¤Ã¿Ò»¸öÔªËØ¶¼±»ÇÒ½ö±»ÓÒÒÆÒ»´Î,´Ó¶øÂú×ãÌâĿҪÇó.Ò²¾ÍÊÇ˵,AµÄËùÓÐÔªËØ·Ö±ð´¦ÔÚp¸ö\Ñ­»·Á´\ÉÏÃæ.¾ÙÀýÈçÏÂ: n=15,k=6,Ôòp=3.

µÚÒ»ÌõÁ´:A[0]->A[6],A[6]->A[12],A[12]->A[3],A[3]->A[9],A[9]->A[0]. µÚ¶þÌõÁ´:A[1]->A[7],A[7]->A[13],A[13]->A[4],A[4]->A[10],A[10]->A[1]. µÚÈýÌõÁ´:A[2]->A[8],A[8]->A[14],A[14]->A[5],A[5]->A[11],A[11]->A[2]. Ç¡ºÃʹËùÓÐÔªËØ¶¼ÓÒÒÆÒ»´Î.

ËäȻδ¾­Êýѧ֤Ã÷,µ«×÷ÕßÏàÐÅÉÏÊö¹æÂÉÓ¦¸ÃÊÇÕýÈ·µÄ. 5.19

void Get_Saddle(int A[m][n])//Çó¾ØÕóAÖеÄÂí°°µã {

for(i=0;i

for(min=A[i][0],j=0;j

if(A[i][j]

if(A[i][j]==min) //ÅжÏÕâ¸ö(Щ)×îСֵÊÇ·ñ°°µã {

for(flag=1,k=0;k

if(min

printf(\ } }//for

}//Get_Saddle 5.20

int exps[MAXSIZE]; //expsÊý×éÓÃÓڴ洢ijһÏîµÄ¸÷±äÔªµÄÖ¸Êý int maxm,n; //maxmָʾ±äÔª×ÜÊý,nָʾһ¸ö±äÔªµÄ×î¸ßÖ¸Êý

void Print_Poly_Descend(int *a,int m)//°´½µÃÝ˳ÐòÊä³ömÔª¶àÏîʽµÄÏ¸÷ÏîµÄϵÊýÒѾ­°´ÕÕÌâĿҪÇó´æ´¢ÓÚmάÊý×éÖУ¬Êý×éµÄÍ·Ö¸ÕëΪa {

maxm=m;

for(i=m*n;i>=0;i--) //°´½µÃÝ´ÎÐò,¿ÉÄܳöÏÖµÄ×î¸ßÏî´ÎÊýΪmn Get_All(a,m,i,0); //È·¶¨²¢Êä³öËùÓдÎÊýΪiµÄÏî }//Print_Poly_Descend

void Get_All(int *a,int m,int i,int seq)//µÝ¹éÇó³öËùÓкÍΪiµÄm¸ö×ÔÈ»Êý {

if(seq==maxm) Print_Nomial(a,exps); //ÒѾ­ÇóÍêʱ,Êä³ö¸ÃÏî else {

min=i-(m-1)*n; //µ±Ç°Êý²»ÄÜСÓÚmin if(min<0) min=0;

max=n

exps[seq]=j; //ÒÀ´ÎÈ¡·ûºÏÌõ¼þµÄÊý Get_All(a,m-1,i-j,seq+1); //È¡ÏÂÒ»¸öÊý } }//else

exps[seq]=0; //·µ»Ø }//Get_All

void Print_Nomial(int *a,int exps[ ])//Êä³öÒ»¸öÏî,ÏîµÄ¸÷±äÔªµÄÖ¸ÊýÒѾ­´æ´¢ÔÚÊý×éexpsÖÐ {

pos=0;

for(i=0;i

pos*=n;

pos+=exps[i]; }

coef=*(a+pos); //È¡µÃ¸ÃϵÊýcoef

if(!coef) return; //¸ÃÏîΪ0ʱÎÞÐèÊä³ö

else if(coef>0) printf(\ϵÊýΪÕýʱ´òÓ¡¼ÓºÅ else if(coef<0) printf(\ϵÊýΪ¸ºÊ±´òÓ¡¼õºÅ

if(abs(coef)!=1) printf(\µ±ÏµÊýµÄ¾ø¶ÔÖµ²»Îª1ʱ´òӡϵÊý for(i=0;i

if(exps[i]) //´òÓ¡¸÷±äÔª¼°ÆäϵÊý {

printf(\ printf(\ printf(\

if(exps[i]>1) printf(\ϵÊýΪ1ʱÎÞÐè´òÓ¡ }

}//Print_Nomial

·ÖÎö:±¾Ëã·¨µÄ¹Ø¼üÔÚÓÚÈçºÎ°´ÕÕ½µÃÝ˳ÐòÊä³ö¸÷Ïî.ÕâÀï²ÉÓÃÁËÒ»¸öµÝ¹éº¯ÊýÀ´ÕÒµ½ËùÓÐÂú×ãºÍΪiµÄm¸ö×ÔÈ»Êý×÷Ϊ¸÷±äÔªµÄÖ¸Êý.Ö»ÒªÏÈÈ¡µÚÒ»¸öÊýΪj,È»ºóÔÙÕÒµ½ËùÓÐÂú×ãºÍΪi-jµÄm-1¸ö×ÔÈ»Êý¾ÍÐÐÁË.ҪעÒâjµÄȡֵ·¶Î§±ØÐëʹʣÓàm-1¸ö×ÔÈ»ÊýÄܹ»ÕÒµ½,ËùÒÔ²»ÄÜСÓÚi-(m-1)*maxn,Ò²²»ÄÜ´óÓÚi.Ö»ÒªÕÒµ½ÁËÒ»×é·ûºÏÌõ¼þµÄÊý,¾Í¿ÉÒÔÔÚ´æ´¢¶àÏîʽϵÊýµÄÊý×éÖÐÈ·¶¨¶ÔÓ¦µÄÏîµÄϵÊýµÄλÖÃ,²¢ÇÒÔÚϵÊý²»Îª0ʱÊä³ö¶ÔÓ¦µÄÏî.

5.21

void TSMatrix_Add(TSMatrix A,TSMatrix B,TSMatrix &C)//ÈýÔª×é±íʾµÄÏ¡Êè¾ØÕó¼Ó·¨ {

C.mu=A.mu;C.nu=A.nu;C.tu=0; pa=1;pb=1;pc=1;

for(x=1;x<=A.mu;x++) //¶Ô¾ØÕóµÄÿһÐнøÐмӷ¨ {

while(A.data[pa].i

while(A.data[pa].i==x&&B.data[pb].i==x)//ÐÐÁÐÖµ¶¼ÏàµÈµÄÔªËØ {

if(A.data[pa].j==B.data[pb].j) {

ce=A.data[pa].e+B.data[pb].e; if(ce) //ºÍ²»Îª0 {

C.data[pc].i=x;

C.data[pc].j=A.data[pa].j; C.data[pc].e=ce; pa++;pb++;pc++; } }//if

else if(A.data[pa].j>B.data[pb].j) {

C.data[pc].i=x;

C.data[pc].j=B.data[pb].j; C.data[pc].e=B.data[pb].e; pb++;pc++;

} else {

C.data[pc].i=x;

C.data[pc].j=A.data[pa].j; C.data[pc].e=A.data[pa].e pa++;pc++; }

}//while

while(A.data[pa]==x) //²åÈëAÖÐÊ£ÓàµÄÔªËØ(µÚxÐÐ) {

C.data[pc].i=x;

C.data[pc].j=A.data[pa].j; C.data[pc].e=A.data[pa].e pa++;pc++; }

while(B.data[pb]==x) //²åÈëBÖÐÊ£ÓàµÄÔªËØ(µÚxÐÐ) {

C.data[pc].i=x;

C.data[pc].j=B.data[pb].j; C.data[pc].e=B.data[pb].e; pb++;pc++; } }//for C.tu=pc;

}//TSMatrix_Add 5.22

void TSMatrix_Addto(TSMatrix &A,TSMatrix B)//½«ÈýÔª×龨ÕóB¼Óµ½AÉÏ {

for(i=1;i<=A.tu;i++)

A.data[MAXSIZE-A.tu+i]=A.data[i];/°ÑAµÄËùÓÐÔªËØ¶¼ÒƵ½Î²²¿ÒÔÌÚ³öλÖà pa=MAXSIZE-A.tu+1;pb=1;pc=1;

for(x=1;x<=A.mu;x++) //¶Ô¾ØÕóµÄÿһÐнøÐмӷ¨ {

while(A.data[pa].i

while(A.data[pa].i==x&&B.data[pb].i==x)//ÐÐÁÐÖµ¶¼ÏàµÈµÄÔªËØ {

if(A.data[pa].j==B.data[pb].j) {

ne=A.data[pa].e+B.data[pb].e; if(ne) //ºÍ²»Îª0 {

A.data[pc].i=x;