数学建模社区-数学中国

标题: 求教高手啊,C语言改matlab。帮帮忙,感激不尽 [打印本页]

作者: chenhande    时间: 2012-4-11 18:03
标题: 求教高手啊,C语言改matlab。帮帮忙,感激不尽
#include "stdio.h"$ Z" B3 z# v4 l. \
#include "string.h"
% t! \( E, v  {#define N 50 . R* c3 ^9 e  z6 A9 \
int jisuan(int a[N][N][N],int h,int z,int i,int j);( N; ~% w9 ^( o$ P! s
void micifang(int a[N][N][N],int h,int t);. `& @$ o4 H, A
void buer(int a[N][N][N],int h);- g. N5 N! ~9 h5 v0 V
void warshall(int a[N][N][N],int h);( R% @1 N; t9 _# S( q8 t0 S& u) Z
main()
! d, c8 F8 n3 x' U{/ h5 Q' Y% k4 R# N0 z' g8 @% I
int i,h,j,t;# r3 L% Q" @( _) H
int a[N][N][N];- q; |: o. o) z/ r1 j8 G4 W
printf("请输入邻接矩阵A的行数(或列数):\n");
8 G& b. p0 _; [! sscanf("%d",&h);
  q7 Z9 S- ~, d8 xprintf("\n请输入邻接矩阵A:\n\n");
6 o# F& D3 r; X% Z" o9 ?for(i=0;i<h;i++)$ R* K' f; D( [9 P
{
2 [: M& k( X) U0 Y9 H, }# Dprintf("请输入邻接矩阵A的第%d行.\n",i+1);
" N2 _; p- Y# d) ?" Z( {for(j=0;j<h;j++)1 ]  V" R1 C" [3 S* C
scanf("%d",&a[0][i][j]); + ~4 M0 p: x( p5 U  l- a# g/ f: K
}
1 a! V4 |" W4 g7 yprintf("\n邻接矩阵A为:\n");" @* @) w( d6 I! I
for(i=0;i<h;i++)# v7 C, A% I- D+ p- i! f
{
; m  t. c6 Y/ Y/ i+ D( lfor(j=0;j<h;j++)- Y& F1 c, k% ?; S1 B8 q/ `) f3 z' u
printf(" %d ",a[0][i][j]);
6 X5 d4 Q' p# S2 E9 _printf("\n");
% {' Q* x. U& h}
/ |$ ?6 U1 _) S: H7 ~* {printf("\n\n\n算法一:\n");$ O4 h9 G) p5 L- Q3 x2 S' z7 J
printf("\n矩阵A的1次方为:\n");2 W3 S' i1 l  `2 s! s& J* @  @
for(i=0;i<h;i++)
# q4 q. z0 W9 a5 k7 L6 ^{* I. \7 z) ^0 Z4 f* S% u
for(j=0;j<h;j++)
4 V' Y! n+ r  tprintf(" %d ",a[0][i][j]);( I3 {. q8 y5 |  w" Y0 Y1 M
printf("\n");" d; N0 {% H7 ^' l
}
4 u# v0 x3 U5 r, G+ \8 V+ h5 B9 Cmicifang(a,h,2);
9 Y5 P2 o3 `% k& y8 sfor(i=0;i<h;i++)  a# `) W# `: a' Y- |2 P7 e& H* a. j- E
for(j=0;j<h;j++)# Y  }& c+ L3 e* m- A/ b. ?' a
a[h][i][j]=0; //全部赋值为0!. f/ `. O5 k/ u" O; j( l
for(i=0;i<h;i++)- B" M5 V3 {4 Y) h
for(j=0;j<h;j++)
* v5 a, z& I9 K( Vfor(t=0;t<h;t++)
: W. A2 F) r9 O8 k8 T# Z+ Ha[h][i][j]=a[h][i][j]+a[t][i][j];$ J/ e4 @4 H8 L" x
printf("\n\nB的值如下:\n");
- U6 @; p, Y4 Y1 w# ]) P# a- @for(i=0;i<h;i++)
1 l6 X% S% d. ?{+ J7 F5 }5 ~; |# |" S/ i' C1 N
for(j=0;j<h;j++)- u; A6 ]' g' p6 S( o  P
printf(" %d ",a[h][i][j]);0 m9 Y' `9 ^& [
printf("\n");' a9 M- u. ?' s2 b0 V
}% N. i1 o, i. w5 z
printf("\n\n\n算法二:\n");
* W/ j/ l* A, Iprintf("\n矩阵A的1次布尔幂次方为:\n");
, x! I* |% {9 w; Efor(i=0;i<h;i++)
0 M( x% ]: h8 q' Y( ?; G{
. ^& }% I- g9 u, r  h3 Mfor(j=0;j<h;j++)
) B& V/ D9 B* g) t{2 |/ w( D+ T7 g3 x4 j
if(a[0][i][j]>1)
. h& U9 `1 u8 a6 d6 La[0][i][j]=1;2 L! P) P! K8 V5 |. O& E. O
printf(" %d ",a[0][i][j]);
# Z/ H: G, @* S) B}$ o  z' P9 Z. S3 ]/ R
printf("\n");! s1 B& F3 U- e/ h% W
}
! e: ]- U" Y- D: V( }* q/ O) S1 W( g) dbuer(a,h,2);
3 e* G6 I0 x( I' Z* Aprintf("\n\nP的值如下:\n");
8 s) X! ~1 A4 m. ]for(i=0;i<h;i++)) N9 I1 S8 o  j: Z( T
{  o. l( V- G* N9 E6 y# Y, ~
for(j=0;j<h;j++). y1 e. [: {& J9 a8 C6 g
{
$ E( [* `* p# D% F9 [2 zif(a[h][i][j]>1)" O7 T# p* E3 M( e0 f& z. G9 o$ ?
a[h][i][j]=1;
: y+ m. f* s8 X' Uprintf(" %d ",a[h][i][j]);. x, d- g! g/ ?& J
}
$ u! s* L/ {' B' }! e8 j, b2 J% lprintf("\n");
' U% A7 Z' ^! k8 g& v}
' J' A) k# n6 }; W4 Mprintf("\n\n\nwarshall算法:\n\n");
1 z& x* y! }1 Y* |7 n8 M6 C+ U) N$ N. n5 u/ \
for(i=0;i<h;i++) //处理邻接矩阵A.转化成可达矩阵。1 [7 q" i6 u. m# a# p4 l
for(j=0;j<h;j++)
& W6 `" S& U- [% hif(a[0][i][j]!=0)) p; H6 n/ i. q
a[0][i][j]=1;
9 _* J# `, L9 |" f, Z( wprintf("整理后的可达矩阵为:\n");: s5 c' U8 U9 K, b3 i* b8 q
for(i=0;i<h;i++)
9 q% l3 l8 U4 `& i$ c$ M{
2 F! f3 Y% N( N; kfor(j=0;j<h;j++)* K, H: L4 o; T& x% V/ b
printf(" %d ",a[0][i][j]);9 ~( S4 |- \" A" P6 r
printf("\n");0 W4 E" S' R7 H8 @
}+ f# ^/ q/ W9 x2 e& K: ~7 o6 v
warshall(a,h);2 Y+ B( f; n9 A, h$ P
getch();
& e7 d7 p' T0 T  W$ C% ~}* }, W& j. k3 Y2 a- v. X
int jisuan(int a[N][N][N],int h,int z,int i,int j)
$ z- D& h7 o3 X) N8 e2 z# u9 k1 i- l8 R{& I% e1 Y3 V3 k& ^/ |- H) U
int s,jg=0;1 K4 s$ ~5 n0 @% m$ U
if(z==2)
3 @& V4 w' g* w% @* R1 Q; ]for(s=0;s<h;s++)) F, r& L. W) J$ o% O7 o
jg=jg+a[z-2][i][s]*a[z-2][s][j];) G% f' o" k, {- s2 V" r& q0 ~
else 3 ?8 R" V/ T0 @9 U
for(s=0;s<h;s++)6 ?/ b2 q+ w5 ~9 |. M
jg=jg+a[z-2][i][s]*a[0][s][j];' \; Z4 s; g+ L7 v" i
return jg; + \. N! t: W% [. e0 ~7 S; H( ^1 y
}
+ V. U3 D! R( c- S0 @* h3 j* svoid micifang(int a[N][N][N],int h,int t)4 U& H9 U% Z5 e
{" J0 B  |" _8 a) f
int i,j,s=0;# [* B# E8 ^' S% I+ [' T7 }' g' P
int z=t;
, j. I% S8 v9 I) ~! F" Tif(z<h) //矩阵的值不全为零。
4 j# [6 M4 w& \. U, _; w! p{ & P. J! o- l$ u- i( t2 x, C
for(i=0;i<h;i++)
9 c: F& u9 e! n) Hfor(j=0;j<h;j++)) q. Z! N6 E% p/ W& Y2 q
a[z-1][i][j]=0; //全部赋值为0!) h, _& H2 a( P, i3 D
for(i=0;i<h;i++)
. V; |% p0 R3 Z& H4 wfor(j=0;j<h;j++)
4 l9 t, g. A& [- t+ ~$ K5 ~. wa[z-1][i][j]=jisuan(a,h,z,i,j);" g7 s% e% P0 K
printf("\n矩阵A的%d次方为:\n",z);
- S0 g/ ~; z0 t% i3 S0 t1 wfor(i=0;i<h;i++)9 z( B8 {: Y' Q$ D5 g2 ]
{2 P' M& a. a3 x  M' v
for(j=0;j<h;j++): v7 S+ {0 @- b( a& ]
printf(" %d ",a[z-1][i][j]);
  O; j3 Q" j5 f. H8 r" t7 G; a) gprintf("\n");
! T$ u3 @9 g0 O}
( \( c% C7 g* n  Tmicifang(a,h,++z); " |, G& v. J8 o
}6 b% g" c! B3 Q( E3 j) }! ]+ H; i
}; g8 d9 h( E7 E
void buer(int a[N][N][N],int h,int t)' A7 `! v' \* J. ^3 M
{! b7 i2 C4 m7 b
int i,j,s=0;
! e( t2 S4 t5 Y8 @1 wint z=t;
1 v5 E6 f# V, R' d) `0 @: ]if(z<h) //矩阵的值不全为零。  K7 B! P- ]  Z0 E0 I7 E# b
{
- F3 x  K! F% O6 ^2 ~7 }  e2 a( ifor(i=0;i<h;i++)/ A% l4 [" Q# w
for(j=0;j<h;j++)
! v: N! h) o2 A6 o$ \& m2 Z7 a" I) ma[z-1][i][j]=0; //全部赋值为0!* T7 Q9 l8 E5 [# b( x" S) l
for(i=0;i<h;i++). g  s0 O: i/ J' }, z' W
for(j=0;j<h;j++)8 f7 a% ?, B$ S9 {
a[z-1][i][j]=jisuan(a,h,z,i,j);
, Z# U' Z' ~: L. iprintf("\n矩阵A的%d次布尔幂次方为:\n",z);
. T  R! ?- {0 l4 O" T) E7 Q/ Xfor(i=0;i<h;i++)1 K+ W5 Z' M+ d+ F
{* c7 B# Y3 \* k/ ?# I
for(j=0;j<h;j++)
5 h8 B: T9 M8 Z! m* M2 e+ ]. Y{
8 {! G. B, ^; oif(a[z-1][i][j]>1)) b  s1 Z' h" W* }* Q
a[z-1][i][j]=1;
% b8 r3 R, u0 Y( ], iprintf(" %d ",a[z-1][i][j]);
% S2 K! {( @5 v) O1 \; @+ S* H+ U}
8 r: }) ~5 h8 n! l0 C' _# C% p; K/ [printf("\n");
3 e! s+ z' t' Y* X" t}
! l! o/ F5 A  D1 {. B8 Gbuer(a,h,++z);
7 D& ^4 |4 W+ q/ N4 `}
6 ~8 S+ I& r4 Q, [6 p  m}$ K( v9 I" ]6 N" c
void warshall(int a[N][N][N],int h)
: i$ s' F- [% e/ s( B9 A2 K{+ t9 L7 C1 c( j0 N) [& n
int i,j,p,q,r=0,s;( Z' L2 C) ?/ h- `; M, w" v6 C
for(j=0;j<h;j++): |2 g. l" d, r% i3 Z+ M9 i: {4 Y
for(i=0;i<h;i++)
# T2 W1 L) P$ ~# v% h1 Y+ ~if(i!=j && a[0][i][j]==1)& K) \" \8 l2 }# q
{( b% X% N( ~/ X
for(s=0;s<h;s++)% d: p! i1 D$ p8 I
{
+ u) D6 f' B# Y/ S  Ja[0][i][s]=a[0][i][s]+a[0][j][s];3 x: {5 `# b% \3 B6 _
if(a[0][i][s]==2). B- L( B! F: x
a[0][i][s]=1;& ]% P0 o; D0 \
} % a& w, K$ X2 w, `9 o# ~
printf("\n第%d次运算的结果如下:\n",++r);  Z! f  d3 {2 ]( G! p( R' Y0 r
for(p=0;p<h;p++)
) z# b/ ~( G6 k$ |* E9 V{/ Y& K$ r7 w5 ~* e3 G
for(q=0;q<h;q++)3 r4 y; f1 A' B' F: }5 W  @
printf(" %d ",a[0][p][q]);
1 y5 M% R. E* [) ]* Dprintf("\n");
5 l6 k2 v% Y0 }1 b4 \) A& x}
, j: c- o3 x2 V0 U}
3 s1 l+ I$ v/ I2 J}
作者: lizhaowei1990    时间: 2012-4-11 20:25
先点一点这个是要干什么?




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5