QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2541|回复: 1
打印 上一主题 下一主题

求教高手啊,C语言改matlab。帮帮忙,感激不尽

[复制链接]
字体大小: 正常 放大
chenhande        

1

主题

2

听众

7

积分

升级  2.11%

该用户从未签到

跳转到指定楼层
1#
发表于 2012-4-11 18:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
#include "stdio.h"
% H: i& P; K$ l- V0 H1 x#include "string.h"
  [5 b3 `( |4 v" M#define N 50
9 [+ h* g4 I& ?. \% |int jisuan(int a[N][N][N],int h,int z,int i,int j);
3 a9 ]  @7 P8 I/ V% [# ?void micifang(int a[N][N][N],int h,int t);* B6 d$ D7 y; [8 ?$ i
void buer(int a[N][N][N],int h);
$ j6 P# E  U8 N. ]0 A% j% p- Mvoid warshall(int a[N][N][N],int h);
6 y: L' z0 x+ O1 Rmain()3 O- p  M0 F2 J+ ^! ?. ^
{
+ k5 H) [) @8 g9 U4 h2 Wint i,h,j,t;
$ I# R+ t6 }% H' |% E3 e9 Rint a[N][N][N];+ i$ X- |, _' U. a& H- M2 ^7 n
printf("请输入邻接矩阵A的行数(或列数):\n");
: r4 H- W, W4 D7 Z9 X6 Yscanf("%d",&h);' q& ?% |9 p  Q
printf("\n请输入邻接矩阵A:\n\n");
0 {- H7 K" t5 V( M! h' [8 z) Afor(i=0;i<h;i++)9 i* x7 }9 f7 \4 B* L9 \+ ^
{
; Q8 F4 ]3 e% P3 E1 C! zprintf("请输入邻接矩阵A的第%d行.\n",i+1);# v- a2 Y; e7 K8 P. n! J
for(j=0;j<h;j++)' y+ [' W+ q& v/ Q  }$ Y
scanf("%d",&a[0][i][j]);
% s7 [  A7 |3 y3 u# j}- l6 `1 z$ v& h
printf("\n邻接矩阵A为:\n");
+ n: v. C8 C) f& _& O4 N, Zfor(i=0;i<h;i++)
/ j* V7 f4 Y7 U! [- o! Z. u{' C& c3 W. z( l) Q7 w! K7 n% a# F
for(j=0;j<h;j++)
! w$ n* b+ F% o5 C$ [; f3 Q5 `4 {printf(" %d ",a[0][i][j]);) w. x" h: Q" U, `3 S" [* Y) C1 C* }
printf("\n");
: Z/ P1 y0 _9 \2 m5 W) t: L, Q& {6 w}4 ]6 i2 y/ ]% E) Q# m. H
printf("\n\n\n算法一:\n");, L$ r5 k: |+ `. r
printf("\n矩阵A的1次方为:\n");% p/ r$ Y* V% Q% L% x9 \
for(i=0;i<h;i++)) C5 `  O: e, p; k9 E- P' L% Y, n3 _$ ?
{
7 B# e- ?. N  V. F' dfor(j=0;j<h;j++)7 G, M* v8 l, F' S, Z
printf(" %d ",a[0][i][j]);( u1 e6 h0 f/ v& ^  N  B4 z
printf("\n");
' a% i' `( u( z% g) e$ h}
% x. D9 y  V3 L8 a3 k  v! kmicifang(a,h,2);- b! l# l2 u( z' }2 F% x, A
for(i=0;i<h;i++)
4 h+ ~. f5 g: Y$ P' C+ R3 \* Cfor(j=0;j<h;j++): i3 P/ e6 {/ o; C* y0 Q
a[h][i][j]=0; //全部赋值为0!
! X% g; ^; L3 Y2 N4 V! s. c8 ]6 |for(i=0;i<h;i++)/ ?. ]8 ?: d+ X2 v0 Y
for(j=0;j<h;j++)
# p4 O- J3 y* A0 h: t4 o, W7 k1 lfor(t=0;t<h;t++)
$ V- k) O+ ?4 H* |+ b2 [. g+ H3 Ka[h][i][j]=a[h][i][j]+a[t][i][j];: n4 K0 P5 z9 t, I7 P+ F
printf("\n\nB的值如下:\n");2 x- [& s' G; Z
for(i=0;i<h;i++); _0 s& z& {2 S5 q7 Z2 A; q2 F
{
; s$ x$ v+ u" V3 a9 H! P4 \9 v; Xfor(j=0;j<h;j++)
! W% y0 A$ J: D+ Z+ B8 Lprintf(" %d ",a[h][i][j]);
/ f1 d6 j$ l, d! c% x/ R* t3 q/ v. Vprintf("\n");
. S5 L9 P, B* H" u}
; e* w3 N1 x6 ^' t- `printf("\n\n\n算法二:\n");
' B+ j. x  w- y: j) kprintf("\n矩阵A的1次布尔幂次方为:\n");, I8 d3 I6 ?$ H* i8 K1 ~
for(i=0;i<h;i++)
# M( i0 z1 `# X$ ?4 k4 V# F{
8 g0 Y# J: Y& Sfor(j=0;j<h;j++)
- v: ?- A3 D) ?* C{" b- ^6 f% [4 _5 R' j
if(a[0][i][j]>1)& ^3 C3 `0 {1 p2 l8 q
a[0][i][j]=1;
; O% [! s+ g- @( j' kprintf(" %d ",a[0][i][j]);
- ?9 p- Y1 f! Z5 V2 N, ~4 Y}" Y& @. r* H2 O; Z
printf("\n");
2 L2 _( J- M. w8 s}
2 _0 B) e1 d: E* {, \+ O9 [buer(a,h,2);
, c; ^, |. t9 ?# [) oprintf("\n\nP的值如下:\n");
. O8 x3 R  ]/ a+ Y8 ^: ^for(i=0;i<h;i++)' {! B  i7 F5 N" ~" a9 N
{
! B$ ?5 o1 R  {6 Gfor(j=0;j<h;j++)0 N4 i2 W7 w5 C& @1 V1 n/ x$ ?
{
. z4 L" B* g! s) N3 z% Iif(a[h][i][j]>1)3 w4 `% J, o; T& n
a[h][i][j]=1;$ ]  J4 P; m- N5 F$ f( G2 q
printf(" %d ",a[h][i][j]);& i# o( U- E7 i
}
# V) ~1 m0 m2 Lprintf("\n");+ b) W# k1 v3 d. M
}0 O* V+ R1 b! Z4 D, |8 ^0 }/ S
printf("\n\n\nwarshall算法:\n\n");
/ N8 _0 n- H9 y' u+ r) c. Z
3 z% [: a( y* t$ B- Q# ^# Q4 y+ ufor(i=0;i<h;i++) //处理邻接矩阵A.转化成可达矩阵。2 K8 e: N! [6 n8 m+ y: m* h5 ?
for(j=0;j<h;j++)
7 _4 z5 ~' a% Uif(a[0][i][j]!=0)  f' z& x) g" w9 i
a[0][i][j]=1;0 I6 n: s% S0 ~7 U' b& J  u3 D3 |
printf("整理后的可达矩阵为:\n");& m+ P5 l" ~3 I' _
for(i=0;i<h;i++)* y3 m. h3 T" i# t' |4 @1 R9 M
{1 N7 t! ?, c3 t$ p$ ^: [( v& w
for(j=0;j<h;j++)/ x8 Z! m: s( U1 k
printf(" %d ",a[0][i][j]);$ n6 w4 [; N& ]
printf("\n");6 c* G9 @" t) l) e4 {* P
}- ~. _' `. u" _# \3 z2 \9 f8 b3 X
warshall(a,h);
5 F) f6 A+ s5 Z5 Z0 M0 x+ L" \  `getch();
$ c( v" Y' ^: n. H" W% Y! |}. z, \* H: L  J% A3 x5 W
int jisuan(int a[N][N][N],int h,int z,int i,int j)9 _0 }/ s# `' m- \2 J
{
6 I9 a$ s  s# E" X7 Eint s,jg=0;
7 B' c+ M- d" h$ P) I' {$ wif(z==2)2 |1 F* {3 R: G* T8 ~
for(s=0;s<h;s++). E4 X8 ^' u! g- Q( y. H
jg=jg+a[z-2][i][s]*a[z-2][s][j];
% ?4 Y, a% y: K: F+ R' ]+ @else $ S3 D: m% q  V- A$ l: ^  ~
for(s=0;s<h;s++)
4 n7 ~7 V- j' R$ X' }& tjg=jg+a[z-2][i][s]*a[0][s][j];5 B6 Q' G  B  K  v4 H# s
return jg; 5 B7 c1 I, a3 P$ N" x7 Y
}
& L1 U  f) k8 P, S5 M5 a. Yvoid micifang(int a[N][N][N],int h,int t)& m0 u: O8 h) N/ A- ?
{# w8 v( s. a) Z% l9 x6 Y
int i,j,s=0;
0 s. ~  N  x, {7 ]int z=t;
) F% j2 S' g3 c3 Wif(z<h) //矩阵的值不全为零。. M( F& v4 X5 [) }6 u
{ : G" \& Q" ~( v3 G6 Y/ E5 I3 S
for(i=0;i<h;i++)
7 N: U2 h# g% Wfor(j=0;j<h;j++)4 y1 A% P; S! Z1 `% V
a[z-1][i][j]=0; //全部赋值为0!# L8 G6 w! M' e
for(i=0;i<h;i++)! E& u0 q9 t. j  H* m
for(j=0;j<h;j++)
. a% u+ w' ^# q* ^2 E: Da[z-1][i][j]=jisuan(a,h,z,i,j);
- n4 q0 z/ h5 ^& K; [, Aprintf("\n矩阵A的%d次方为:\n",z);
! {3 I: Z+ {! }5 {! j8 \3 sfor(i=0;i<h;i++)1 T: Q: A6 ]- R. Z2 _) o) G
{% j$ b. k7 t4 h, Z
for(j=0;j<h;j++)
; s2 H3 T: O+ k" |. g- s& mprintf(" %d ",a[z-1][i][j]);, g, H8 D/ A6 y3 Q
printf("\n");2 ~" y  b- ^0 I, N
}" w$ }7 l- K/ I7 F# {
micifang(a,h,++z); 2 {. ~2 o- f# J/ u8 ]; R' ?
}6 Y5 g( E/ J. r/ J! \
}
! `8 a' \2 W, Y4 ~void buer(int a[N][N][N],int h,int t)% ~  m0 j# s! F. ]0 t; T& e
{( S; \1 y; v. R  P1 p, H
int i,j,s=0;
# U% M, g0 w% C4 sint z=t;
4 {" s% a5 X$ a$ ^+ fif(z<h) //矩阵的值不全为零。7 a0 m% |2 C  M9 r% p* R
{
) v) A1 v- a, c9 O2 M; Cfor(i=0;i<h;i++)& c: G. w- V: o" L
for(j=0;j<h;j++)
3 H! @% g6 ~6 d2 Oa[z-1][i][j]=0; //全部赋值为0!
1 c6 E. I2 a7 q/ t$ x8 u- R, Tfor(i=0;i<h;i++)# z0 H) a" E$ X* j) O$ `' `
for(j=0;j<h;j++)0 L+ M1 M' m8 [- |' {4 B
a[z-1][i][j]=jisuan(a,h,z,i,j);+ _4 z  {/ d1 t  P- O: t3 g, l; }7 ~
printf("\n矩阵A的%d次布尔幂次方为:\n",z);
- h" b: ]. |% x' w, N' efor(i=0;i<h;i++)
( k, V9 X# n/ F3 ^{% C" e3 ]5 W7 D  _) [
for(j=0;j<h;j++)$ E/ E  U: r* p! r! ?# w
{ + |- `% K. w+ l, P1 A4 W" e
if(a[z-1][i][j]>1)7 _/ T& f8 g9 S/ N& b+ o/ o
a[z-1][i][j]=1; 0 S+ M$ T' J) @; G% K* x/ U
printf(" %d ",a[z-1][i][j]);
# Z& b* M( v. |) ]7 ]' ]* H5 ^}3 L  v  G6 z4 h8 \; s3 s( u
printf("\n");* \7 }$ D- B# M9 t. j; i
}, j3 t5 E! A0 n- C2 F
buer(a,h,++z);
' j5 Z9 z% b5 g* e3 c, Q}3 u0 i& g- R0 m& g1 \
}1 e- L5 X" G  M
void warshall(int a[N][N][N],int h)
2 H4 S1 s$ N0 P2 W  M; d# `{
# ^4 P: ]3 f9 _1 j! Hint i,j,p,q,r=0,s;
7 R5 j3 o4 {3 b. _6 Nfor(j=0;j<h;j++)5 {( k' o1 w) K2 t3 f0 T! e# j, O3 }
for(i=0;i<h;i++)
. B+ F7 P5 q; p3 {if(i!=j && a[0][i][j]==1)% e0 r3 W2 e- P) r
{% [2 C6 l7 W+ }" T! L
for(s=0;s<h;s++)
5 A6 a' N& }6 r$ z( E1 L% c; @{
, ^. d. y) T7 e: z) a  W2 ?a[0][i][s]=a[0][i][s]+a[0][j][s];
2 s3 F! o! J! V2 Y3 N5 c& Dif(a[0][i][s]==2)5 q2 X) g( [6 O  A" x6 I/ o, B
a[0][i][s]=1;1 L/ k, M- R( ], y( d3 F& h+ R8 O
} & b7 j5 [* A# R7 |5 i+ T% B
printf("\n第%d次运算的结果如下:\n",++r);/ _$ [% Z+ L3 r- X( [( I, {
for(p=0;p<h;p++)
; q. A0 |3 `% _+ [{2 ~' s. X! y: T- }
for(q=0;q<h;q++)8 {0 g2 l5 p& \) q: y" h* l
printf(" %d ",a[0][p][q]);
% k. ]7 G' Y& r$ N8 t  i  |printf("\n");- s& ]( ^1 I6 m( Q7 T! _
}
( U8 l$ f& S1 [; j}
  t! ~) o! o8 u* G. F. i3 }' y}
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信

5

主题

11

听众

160

积分

升级  30%

  • TA的每日心情
    开心
    2014-10-26 00:18
  • 签到天数: 63 天

    [LV.6]常住居民II

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-7-21 08:13 , Processed in 0.356516 second(s), 61 queries .

    回顶部