数学建模社区-数学中国
标题:
求教高手啊,C语言改matlab。帮帮忙,感激不尽
[打印本页]
作者:
chenhande
时间:
2012-4-11 18:03
标题:
求教高手啊,C语言改matlab。帮帮忙,感激不尽
#include "stdio.h"
. I1 j+ y9 }; N4 L6 _! J
#include "string.h"
W+ l. I8 Q" l
#define N 50
1 r' o) A6 I, Q6 L L/ o
int jisuan(int a[N][N][N],int h,int z,int i,int j);
$ j! X: ?8 k1 c3 x5 w
void micifang(int a[N][N][N],int h,int t);
% [5 f( ]+ `% |, v3 `
void buer(int a[N][N][N],int h);
. Q f8 S5 {) P. n! W8 a
void warshall(int a[N][N][N],int h);
6 N0 E9 Q6 j' K0 P. Y1 t7 d
main()
5 M2 o; l [0 Q- q. a
{
' k& h8 N# I1 V* m3 i4 ^9 c
int i,h,j,t;
$ O/ t, M A2 H" R; c" E
int a[N][N][N];
6 z' Q' w2 U' B& u3 y
printf("请输入邻接矩阵A的行数(或列数):\n");
3 @& s* d) B& ~, O
scanf("%d",&h);
+ F, D" O' T4 B" J1 T) y& A( q
printf("\n请输入邻接矩阵A:\n\n");
3 L2 k( N9 q9 c$ ]/ B
for(i=0;i<h;i++)
* `0 C% |8 |- [2 c
{
; ^& W7 R1 J, v# e
printf("请输入邻接矩阵A的第%d行.\n",i+1);
7 Q- b4 G4 F: w1 r
for(j=0;j<h;j++)
3 R' E4 m& P* G3 w
scanf("%d",&a[0][i][j]);
% m; ]. t, G# U
}
1 C+ g$ T1 |# x/ `, D, p
printf("\n邻接矩阵A为:\n");
: Z, l( l6 d# T
for(i=0;i<h;i++)
9 s$ ?# x/ \5 N9 K# ?$ W1 ^
{
; b( g9 Y3 |* y7 }8 ^8 K+ p1 u
for(j=0;j<h;j++)
# p( M4 \& S- k( l: T! N6 A
printf(" %d ",a[0][i][j]);
: a. `/ S% w% f# J* U
printf("\n");
7 C8 |9 H3 V6 s$ @' t" w# A% b) C0 s5 H
}
) L% Q- |4 @0 B" _ ~! y
printf("\n\n\n算法一:\n");
- l2 q- l* E/ R7 }: Z
printf("\n矩阵A的1次方为:\n");
2 v7 k; S- r5 ^/ d; [5 E+ i. n
for(i=0;i<h;i++)
7 o: k2 { V5 `5 A( H7 ~( U2 C: L( ~
{
- j5 I4 e1 d( C( ?. o
for(j=0;j<h;j++)
9 i4 y2 j% C( d
printf(" %d ",a[0][i][j]);
/ ^* F: }% e% x% u7 G) K. C
printf("\n");
$ J0 R' D6 Y: R7 V/ b% @/ L9 H; p
}
3 @- H4 s9 x& {( O% t
micifang(a,h,2);
$ P+ |$ @+ [8 F5 j! R P4 y7 m
for(i=0;i<h;i++)
( Z% w1 K! t/ U* x# q
for(j=0;j<h;j++)
. `% j u; Y) }9 @, b% ^+ K
a[h][i][j]=0; //全部赋值为0!
3 _/ \( r# B' L8 V) q2 E: f& d2 z
for(i=0;i<h;i++)
6 P0 V- K( U% I- I
for(j=0;j<h;j++)
$ s- i2 O+ [, D% T+ V( W, e4 A
for(t=0;t<h;t++)
0 E" ]: I" ?; u" }# z
a[h][i][j]=a[h][i][j]+a[t][i][j];
* M2 u0 }* X9 c! G' ]1 k
printf("\n\nB的值如下:\n");
- m) B' E- f6 }" T" m+ B
for(i=0;i<h;i++)
, v. p0 t+ l1 h; R- _+ U
{
* `' y% J$ X$ {# _) J0 f: M5 |7 V
for(j=0;j<h;j++)
. r( n9 a9 t1 V
printf(" %d ",a[h][i][j]);
& g6 B& G2 O6 [& z: q/ P, O
printf("\n");
/ \7 h& `. x* k3 g5 e5 b& \4 W
}
) Q* ~+ e1 W* D9 g9 y3 G
printf("\n\n\n算法二:\n");
3 Z, E7 _% o0 a) @% S
printf("\n矩阵A的1次布尔幂次方为:\n");
6 t# K" n+ D2 m9 P" u# k0 D
for(i=0;i<h;i++)
: U: P2 ?, ]# \1 W- h& z
{
7 m4 I) w! w+ ]# q0 j
for(j=0;j<h;j++)
% L& v' H* B7 b, }8 H' Y
{
. h" L3 b; Z& p8 ^( ~
if(a[0][i][j]>1)
. o2 ^/ I6 Y" }5 d- H: I
a[0][i][j]=1;
" m( p2 x$ f# ^& n7 Y! B! w) B
printf(" %d ",a[0][i][j]);
S' f" W8 t9 c+ T C h
}
* R9 \( N! K' P# R2 ^+ l6 S/ \
printf("\n");
1 V) V" A* r3 l/ O% J% U
}
/ w- b& _" L0 `8 y8 v) I1 [
buer(a,h,2);
9 X5 |& ^: O2 q" q9 j i1 V6 W
printf("\n\nP的值如下:\n");
/ v' q1 Y; h, T+ K- {
for(i=0;i<h;i++)
) ^ r" a5 d0 ^/ j0 d+ T1 d
{
1 C6 }: t. S H+ V! `
for(j=0;j<h;j++)
: @8 i/ c+ k5 X/ a6 v* P2 I, C
{
) @; s. L" T, ]; V% s2 J2 {
if(a[h][i][j]>1)
, C, r+ F- z# F3 U, s" k/ q
a[h][i][j]=1;
% G* M- G& W; B; v; x
printf(" %d ",a[h][i][j]);
9 ~6 R0 c- a3 l. P: `( J' v* c
}
) D9 Q! ?) ~' c2 I% w+ j* ]3 B
printf("\n");
' V, G! B) _6 W$ V
}
& K5 I% M1 [4 K* b
printf("\n\n\nwarshall算法:\n\n");
4 r% @2 Z% i# c7 w" z' t
+ r% g6 W0 x! s5 j6 `
for(i=0;i<h;i++) //处理邻接矩阵A.转化成可达矩阵。
) I/ b6 ]9 o+ i7 n; C7 ?
for(j=0;j<h;j++)
w) x; j% S! y8 y: a
if(a[0][i][j]!=0)
3 l$ D+ s$ K3 S* [& y
a[0][i][j]=1;
2 q* N, P' j6 Y. ^- n% E
printf("整理后的可达矩阵为:\n");
7 G( d! Z9 H% [# X$ v8 S
for(i=0;i<h;i++)
) l# K% e+ J% I, t2 y# B
{
& |2 V' P# O J% R
for(j=0;j<h;j++)
* B7 [6 g9 I% {+ k$ m6 n, z. O
printf(" %d ",a[0][i][j]);
$ G E; U' k9 o; o$ C9 ?
printf("\n");
" y) U9 |! P' s, s8 r# o* d
}
7 V6 O3 W" E# P. D: R- c2 J+ @
warshall(a,h);
4 I* l" p, x( S( `3 ^ ^
getch();
* _" s/ f8 |7 c+ \0 J \
}
) S% _! @9 w3 _9 K7 {, ~: L# z
int jisuan(int a[N][N][N],int h,int z,int i,int j)
! v5 Q2 A7 l7 M% Q4 X9 ?
{
1 N9 G: T6 V* J. U% ?
int s,jg=0;
7 h' Z& \) W- I. M! K+ [
if(z==2)
- ?4 D7 S( o1 q0 W
for(s=0;s<h;s++)
. I5 z6 I# g7 }' W8 M1 G, r
jg=jg+a[z-2][i][s]*a[z-2][s][j];
+ v& r* T7 }+ [# R# s
else
1 H( s% ^+ V- y: Y4 G; b" `
for(s=0;s<h;s++)
7 f- x5 Q! ~$ k; K. r
jg=jg+a[z-2][i][s]*a[0][s][j];
. u T9 U1 O/ ?, K$ r' r
return jg;
1 A5 J" Q6 H8 V, X- Z+ g7 r
}
; f& \# o5 T# G7 m) H
void micifang(int a[N][N][N],int h,int t)
0 D: Z: _ u7 Q0 B& A& y) J$ M
{
# x1 \1 I& k+ P: d. Q
int i,j,s=0;
. W( S3 J9 s6 R2 J# I- G- d
int z=t;
5 E' K2 _1 S% @
if(z<h) //矩阵的值不全为零。
% T6 J. Q' U) ~! k( M
{
0 e: J7 E( b3 A, {. @$ e- B6 {
for(i=0;i<h;i++)
! F9 U9 e9 |# s9 H7 x
for(j=0;j<h;j++)
% R. Q' d( _) M" p# e4 s7 U; K
a[z-1][i][j]=0; //全部赋值为0!
/ E' m8 F+ q( J0 i7 B6 v% r9 ^
for(i=0;i<h;i++)
6 T1 R" Q% z1 g5 K4 p9 w
for(j=0;j<h;j++)
" x7 Z0 C, ]$ u/ o! E# U |
a[z-1][i][j]=jisuan(a,h,z,i,j);
9 Z6 E/ h& h8 Q' F4 L
printf("\n矩阵A的%d次方为:\n",z);
& ?+ R( B4 N2 [# u3 o9 q- k
for(i=0;i<h;i++)
: F/ }; Z6 j6 [) z
{
3 d4 Q' G. ^) b
for(j=0;j<h;j++)
/ T- S% n) E8 b! E) _; k2 `/ |
printf(" %d ",a[z-1][i][j]);
; V) n0 h2 E# U, f3 Y
printf("\n");
" q5 {5 Y4 M9 e8 ]/ z) L) O9 W" j/ m
}
, k! s8 @. s# Y: A1 b( [# V: C
micifang(a,h,++z);
6 X- y" J: h5 M: ?
}
S7 \( F0 ]% G. z" u& @
}
/ |* y) \+ ]' s9 H9 t
void buer(int a[N][N][N],int h,int t)
5 N" p8 ^8 `8 U6 u) k6 E8 I
{
0 ^& r* I' ]# D _* C7 Q7 X' c
int i,j,s=0;
4 v2 ~0 s4 `& l! p9 d. @% \9 N
int z=t;
1 W1 p9 y' G4 v+ Z/ n) Y9 m
if(z<h) //矩阵的值不全为零。
$ J$ |3 z4 Q% Q2 ]8 N' x
{
; `! D* m7 a% h' X
for(i=0;i<h;i++)
' d5 X) a! r, t$ Z
for(j=0;j<h;j++)
& x ? o* S5 O- l
a[z-1][i][j]=0; //全部赋值为0!
2 \2 }3 J/ s$ {, F; i8 W
for(i=0;i<h;i++)
$ R3 [: I M/ Z4 M. C# S
for(j=0;j<h;j++)
7 N/ V* R! z* p1 b- P% p
a[z-1][i][j]=jisuan(a,h,z,i,j);
; J/ }! t; B5 S9 D1 \& ?! t) e3 Y# W
printf("\n矩阵A的%d次布尔幂次方为:\n",z);
4 N" r5 c7 p$ ^& s% V8 N J" \
for(i=0;i<h;i++)
% ^, l+ S! U7 n# N3 i( F2 K6 ]- x. c
{
3 C8 K# w7 L! Q0 l/ f' @% P
for(j=0;j<h;j++)
$ U0 J- }/ S* q5 F; }! ]! z9 d3 j; a
{
' z& ^9 U& @! J# W# @: I
if(a[z-1][i][j]>1)
$ D. U7 C/ }( d# z- c% Y
a[z-1][i][j]=1;
. `* Z" W! j( F
printf(" %d ",a[z-1][i][j]);
* H% o& A& E8 U9 s# s8 G; O' }
}
# E+ J* b. C: a8 Z" e+ g7 G( x1 g
printf("\n");
) |/ h. C! v( e) m$ N
}
; M* U- d) Y& i+ f' B4 E
buer(a,h,++z);
% \6 R d* @: h9 K, A
}
& V) U/ [4 M: C( _
}
4 e: Q2 P- ~7 G
void warshall(int a[N][N][N],int h)
4 y8 I% ]; k a3 D
{
& N# u/ Y) n6 B' e. r& @
int i,j,p,q,r=0,s;
7 J% D/ o: j# _8 k3 c$ N
for(j=0;j<h;j++)
' h; Y- ^# ]& W& K C
for(i=0;i<h;i++)
) a$ P. N+ I- T
if(i!=j && a[0][i][j]==1)
- [2 u1 }- g q |: \( V
{
+ g& b: U) K1 o* {" S
for(s=0;s<h;s++)
% {' F7 i& L7 I2 Y7 [* Q, |$ n5 ~
{
$ d- y( t: Y1 r
a[0][i][s]=a[0][i][s]+a[0][j][s];
8 B5 r; i Z% S& d6 P
if(a[0][i][s]==2)
% p$ D3 R d( I. L3 S2 g
a[0][i][s]=1;
7 g9 B- Z4 l! l. X
}
+ U5 J# Y) w8 p2 H4 p& h/ D$ D9 E
printf("\n第%d次运算的结果如下:\n",++r);
9 N0 Z' L7 ]$ z
for(p=0;p<h;p++)
7 P% ` r0 }8 K9 w4 ]- K
{
X) m" h' @2 d$ N
for(q=0;q<h;q++)
/ h. r- I6 Z; F4 Q# Q2 _7 U ^
printf(" %d ",a[0][p][q]);
4 h+ [ Q) Y9 N' q# \7 H/ J
printf("\n");
4 @- B" S0 L$ X$ ?1 O7 X
}
( H; r* {" O! A, j# Q5 [; q- r+ f
}
! Z) c7 ^9 j, J
}
作者:
lizhaowei1990
时间:
2012-4-11 20:25
先点一点这个是要干什么?
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5