数学建模社区-数学中国
标题:
求教高手啊,C语言改matlab。帮帮忙,感激不尽
[打印本页]
作者:
chenhande
时间:
2012-4-11 18:03
标题:
求教高手啊,C语言改matlab。帮帮忙,感激不尽
#include "stdio.h"
' V6 f7 c* x$ Z& Y5 o# ?
#include "string.h"
( j+ ]- J6 a: s5 D% U
#define N 50
& d6 Q u+ }6 w6 v! Q R* ^
int jisuan(int a[N][N][N],int h,int z,int i,int j);
. _; q+ F8 [) _) F9 V, ^
void micifang(int a[N][N][N],int h,int t);
7 \7 H) N. `0 `2 T4 Q. D9 o- i
void buer(int a[N][N][N],int h);
8 [. {" Z$ y; E {& P, N6 D
void warshall(int a[N][N][N],int h);
* t" K( T# O: R+ J
main()
, a0 T- {9 L, D! r) y; L! D8 e
{
8 l. q$ Z s( F. v
int i,h,j,t;
) N" O5 k1 ]/ U& A2 i
int a[N][N][N];
, o% G7 t a7 M i+ h: N" [
printf("请输入邻接矩阵A的行数(或列数):\n");
4 c, Q$ A4 V0 d3 \. ]
scanf("%d",&h);
& t5 c2 O2 C" o+ s u! `# J k1 S
printf("\n请输入邻接矩阵A:\n\n");
- _" P( p1 I( L" {% }1 s$ d3 m: T
for(i=0;i<h;i++)
1 l+ |' ^8 z4 E( j; e% T. q
{
- a! U; m. p4 H! n& Y4 O( }
printf("请输入邻接矩阵A的第%d行.\n",i+1);
! z2 K4 `5 F+ @: z3 r* n
for(j=0;j<h;j++)
- K6 U: ?5 G- m4 s
scanf("%d",&a[0][i][j]);
1 m8 S, ^ {0 q, \2 D
}
# V" G |% @( X
printf("\n邻接矩阵A为:\n");
* B( N2 F. [. f! Z) ?) [1 O
for(i=0;i<h;i++)
* {" f7 x1 W# E. q* m
{
2 P) o! e) j& B* [# M9 Z* Z
for(j=0;j<h;j++)
! _1 J1 U7 L& t* q
printf(" %d ",a[0][i][j]);
3 d S7 W9 B7 {0 A
printf("\n");
2 T6 K8 n4 U; N4 B: w K
}
) ?. d- U& D2 I4 D' F* n
printf("\n\n\n算法一:\n");
. J" B1 \. T/ k/ R: U, n ^
printf("\n矩阵A的1次方为:\n");
! o! k$ @$ B* o8 d& f# u2 t* i& V
for(i=0;i<h;i++)
$ P. g) X9 }3 G9 O& r% q7 P
{
3 v& M0 I0 ~( F
for(j=0;j<h;j++)
/ f: T Y. t O1 W; a! M1 v) O
printf(" %d ",a[0][i][j]);
( g2 z4 l& c+ @* Q: t2 {% J
printf("\n");
8 _9 G; A8 S. M8 a7 s, j5 l
}
* `7 R, S5 M+ Y. p- f7 [. U5 H: G n
micifang(a,h,2);
) y: A: h% Z9 ~9 U
for(i=0;i<h;i++)
2 D. l# e" Z) d) }- u
for(j=0;j<h;j++)
( M3 i0 M7 \" `
a[h][i][j]=0; //全部赋值为0!
' }3 e. E1 S' M# g
for(i=0;i<h;i++)
4 g: i) k( M) ^( N1 x4 M3 w
for(j=0;j<h;j++)
4 l4 n- I& G2 k" S( u$ N- y
for(t=0;t<h;t++)
. s7 d" x& r+ r0 {+ k: V: l1 M
a[h][i][j]=a[h][i][j]+a[t][i][j];
+ M; l7 r0 ]& o! }6 b. J
printf("\n\nB的值如下:\n");
* e. A7 M) a. r, p8 b8 G) S
for(i=0;i<h;i++)
' V e4 C& x. R8 P* b
{
, q6 D" \ B5 \/ I) x' O* {
for(j=0;j<h;j++)
+ j4 g" y2 g% n: P( E0 D" I) x: C
printf(" %d ",a[h][i][j]);
' ] @- t- H* ?$ v& ?
printf("\n");
& k- C, U; L5 V( z& t8 {
}
9 _( B6 w$ ^6 t; R- l
printf("\n\n\n算法二:\n");
* ^ O H% F. D; ]$ i
printf("\n矩阵A的1次布尔幂次方为:\n");
) ~$ ]7 w1 d# W* f% s3 i6 V
for(i=0;i<h;i++)
6 Y* |; J& `8 T
{
/ m& e$ a* q/ L% R# `. A. F
for(j=0;j<h;j++)
& |% `6 b+ a; ?8 G9 r }4 D
{
* K8 ]0 _! i( J8 c9 r6 P
if(a[0][i][j]>1)
% v) I# Z! @3 T9 ?! Q
a[0][i][j]=1;
. K4 w$ }4 ~; N- P9 I2 Z2 C. L
printf(" %d ",a[0][i][j]);
}3 {8 c$ g% }. l' q
}
2 e' d2 } K" |& W+ Y, E! V
printf("\n");
6 M1 |% u+ {, f" E) S
}
( g; Q8 c; v6 T" h6 h
buer(a,h,2);
/ ~- ^: Y: t1 S( S d
printf("\n\nP的值如下:\n");
. O8 X- l4 e7 ^4 o+ e( B# u: U) l
for(i=0;i<h;i++)
9 C }# z5 W" [6 A, `
{
6 N! s; j$ N+ T ]# M9 L
for(j=0;j<h;j++)
9 v B B/ ]) C2 D
{
! k3 ]" t0 X$ L$ l
if(a[h][i][j]>1)
1 h! Z% W6 }# o& n9 T
a[h][i][j]=1;
: z# v3 ?4 w: U5 L
printf(" %d ",a[h][i][j]);
# G3 C" V2 [6 Y, G
}
5 C! ~! C3 g& {* G+ K6 @ Y% [
printf("\n");
! B; ~' X2 ~; R1 B, z$ }: s
}
, A' K6 D; i: M$ u- ~, {
printf("\n\n\nwarshall算法:\n\n");
: ]4 X# e4 g& |2 [
, E% h: o" B) w. u& s2 {
for(i=0;i<h;i++) //处理邻接矩阵A.转化成可达矩阵。
/ c% O/ G* @/ b- d/ F6 C" h
for(j=0;j<h;j++)
$ v3 t( t1 N: q5 o
if(a[0][i][j]!=0)
7 h. t4 ?2 G% ?
a[0][i][j]=1;
) i; K' I3 Y3 c& Z, q% q- O9 m8 T
printf("整理后的可达矩阵为:\n");
, V4 A: ^ ?2 _" G9 A$ T% ~) y
for(i=0;i<h;i++)
9 w7 w6 w- _: E+ P, }
{
; g2 z: e4 O: o$ }/ \7 K9 ?% [3 k
for(j=0;j<h;j++)
4 V; r6 U) L& U0 J% H/ J
printf(" %d ",a[0][i][j]);
/ d/ L1 p' q1 |) ^; T( d7 D
printf("\n");
% I+ d: x% _- j5 @
}
2 |& T, I- e2 @ }& d
warshall(a,h);
# O6 n" t; y; i! e; x2 G5 `$ j
getch();
& J& s) b( @9 Y# y) H
}
: s l0 ~- ^. f1 C0 Q
int jisuan(int a[N][N][N],int h,int z,int i,int j)
8 ?! y, @9 v4 ~
{
0 m1 r* Y" E# b( L v6 G% m
int s,jg=0;
+ t% l( g0 a q E9 g% B
if(z==2)
' x+ G# S8 k6 @* Q9 M. r9 A
for(s=0;s<h;s++)
5 p) t8 B) e4 j' i0 C5 j- Y6 D
jg=jg+a[z-2][i][s]*a[z-2][s][j];
D5 ^! R# \+ I9 J
else
2 P1 h6 B6 t S7 l& H4 C7 K
for(s=0;s<h;s++)
# ]6 [' E2 R8 D0 P, _) D
jg=jg+a[z-2][i][s]*a[0][s][j];
; _% E! u/ ~% U$ B' D5 u9 ~
return jg;
, `) I& S& G, ^
}
. Q6 p4 u: P# }* C6 d) I4 Q
void micifang(int a[N][N][N],int h,int t)
3 \$ `/ k% E: ~6 P e, ^# r7 G
{
; l B5 U. W7 |! Q: r
int i,j,s=0;
, F! L' t1 k+ Y. C; I8 w5 M o+ n
int z=t;
+ a! |6 |* W. I: ^1 F% a5 w: i9 A
if(z<h) //矩阵的值不全为零。
4 C% s) j; n% T% z
{
* [* T5 T/ F- [$ X
for(i=0;i<h;i++)
: ^1 k4 ^8 H8 l1 n3 D
for(j=0;j<h;j++)
r* t7 E2 C1 a% d5 `6 `2 e
a[z-1][i][j]=0; //全部赋值为0!
6 D7 @% A5 q# N9 w
for(i=0;i<h;i++)
% {. Q* _+ K/ r8 F/ D
for(j=0;j<h;j++)
4 {/ p$ u7 v7 f
a[z-1][i][j]=jisuan(a,h,z,i,j);
1 Y7 N6 a) [& H3 l
printf("\n矩阵A的%d次方为:\n",z);
5 {: L: ~' z) Y
for(i=0;i<h;i++)
. o+ S8 C3 z4 J$ ]
{
/ s/ A/ b4 a# `% U- ]4 J
for(j=0;j<h;j++)
1 q6 K+ F! S G" `1 G! J
printf(" %d ",a[z-1][i][j]);
- k' Q7 W# o% p1 V V' I2 Q$ w+ S
printf("\n");
: a6 W( v. g2 K. @1 d# s
}
* R# n+ b: W2 L! H$ i
micifang(a,h,++z);
% K2 v8 ]- Q- h B/ M! ]- G+ U
}
$ u! m Q! x6 T3 G; t% B
}
; n2 o; C; S, O, n+ C; D: @- u9 [
void buer(int a[N][N][N],int h,int t)
2 e4 F% l, u2 h0 B# k9 J0 F0 W& R
{
" O6 v# [) ^7 m. P0 ?# ~. r: j8 h
int i,j,s=0;
4 @( V3 K2 V P) n2 a' e5 e
int z=t;
" ~5 T b7 _7 \& e) W9 X5 e3 i
if(z<h) //矩阵的值不全为零。
1 ?% R% n8 q6 @# D7 E9 s0 h
{
6 k1 l) P$ ]8 P* i6 Z t
for(i=0;i<h;i++)
j8 ~9 w- r0 ]2 ~- x
for(j=0;j<h;j++)
! h- y3 k1 i9 h. p( Z$ R+ j
a[z-1][i][j]=0; //全部赋值为0!
7 q& ^0 `) M# E, T/ X2 v2 R* |
for(i=0;i<h;i++)
' U& Y5 \5 Z% T' }) x
for(j=0;j<h;j++)
' [- M6 i6 n6 O/ x! g: G
a[z-1][i][j]=jisuan(a,h,z,i,j);
" ]4 i4 n. T& b/ j" G+ w
printf("\n矩阵A的%d次布尔幂次方为:\n",z);
% | d& ^: g8 E' p9 I4 b# \
for(i=0;i<h;i++)
" t) ~. \$ }) ~" Y7 j3 z- O) \
{
3 g# `# H+ p+ O, g! [& [" @0 i
for(j=0;j<h;j++)
5 V8 s+ W1 ?/ i* a4 S% W' u
{
! X' X& y5 u! Y& I/ M
if(a[z-1][i][j]>1)
2 L2 K( m; L& D# U8 J9 T/ \! @. H4 Z
a[z-1][i][j]=1;
; e! ?# i2 X) S0 ~9 D
printf(" %d ",a[z-1][i][j]);
# @) G0 {. a: a6 r( i# v
}
0 U; f( M) S8 ~& u5 G, J: j4 e& J
printf("\n");
5 P) Y0 R: ~8 z8 i$ s
}
; n" t- @7 ~ T" a/ x+ }
buer(a,h,++z);
# V) _. X: F6 x, r1 n+ w( l
}
5 h' X# c8 z# }
}
$ F3 c! _1 ?7 p( l
void warshall(int a[N][N][N],int h)
; l- i: U1 E& S3 z2 Z/ F+ z, M8 z
{
3 l7 l9 b$ C7 L* b5 a2 ~& a
int i,j,p,q,r=0,s;
0 d$ s( n) k% i% o+ W7 z6 `. b6 B( U
for(j=0;j<h;j++)
3 g1 v. c. o5 u' ]) k3 b
for(i=0;i<h;i++)
0 h3 `' I4 d Z9 c) b& z$ o
if(i!=j && a[0][i][j]==1)
6 S; f' L' i6 W1 P
{
& u5 o* C% r- J, f
for(s=0;s<h;s++)
% U/ C) B/ Q3 ^
{
6 Q8 ?- j7 h# i7 d9 b' y
a[0][i][s]=a[0][i][s]+a[0][j][s];
4 @# G* E3 U7 Z% e1 e( q0 O. I
if(a[0][i][s]==2)
/ U2 t: j; Y. k* p, M- q; y: K: A
a[0][i][s]=1;
' @! m% l# t( f7 C m) a8 F: h
}
e/ I" F3 ~" [ G) W$ m
printf("\n第%d次运算的结果如下:\n",++r);
% S: g7 r z# w1 B
for(p=0;p<h;p++)
E& k B' ^4 U$ n
{
/ ~3 u) W8 G/ s
for(q=0;q<h;q++)
H3 Q4 K) Q: i# k
printf(" %d ",a[0][p][q]);
1 B, {, e5 [1 G6 {+ a4 w
printf("\n");
5 S4 u' h ]5 X0 Q8 M' w
}
" D3 X3 L+ x6 {0 k2 C
}
( Q% ]) _2 J; @6 P
}
作者:
lizhaowei1990
时间:
2012-4-11 20:25
先点一点这个是要干什么?
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5