QQ登录

只需要一步,快速开始

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

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

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

1

主题

2

听众

7

积分

升级  2.11%

该用户从未签到

跳转到指定楼层
1#
发表于 2012-4-11 18:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
#include "stdio.h"
: H! g/ p# Q; i* C! b, j, T#include "string.h"  }- O7 ?' q7 ]1 F5 p, J
#define N 50 " e) t  R# O* d9 E
int jisuan(int a[N][N][N],int h,int z,int i,int j);
& B; k! d4 x: f8 A# U5 X7 Bvoid micifang(int a[N][N][N],int h,int t);8 _* G! S) x: f- e' f
void buer(int a[N][N][N],int h);0 B5 a" v8 e# D: m# \
void warshall(int a[N][N][N],int h);
( @5 Q2 \0 f" W% @main()
( R0 b1 ]  Y& n5 v# o- i( o{  ]3 j2 ], o4 i% ^* J; g$ T9 k
int i,h,j,t;5 r4 Z0 \# u4 C; s
int a[N][N][N];% ?7 ~, t0 W( m. v8 c% R2 V
printf("请输入邻接矩阵A的行数(或列数):\n");2 r9 x# w7 z6 ^) g
scanf("%d",&h);
. N6 i2 C0 d4 M9 y, o. jprintf("\n请输入邻接矩阵A:\n\n");
) o0 O0 ?3 i+ B0 e% w6 B& yfor(i=0;i<h;i++)1 |- \4 j1 T) J, D! V8 s
{$ [$ u- S1 h& x( d6 p
printf("请输入邻接矩阵A的第%d行.\n",i+1);5 e# n2 S) O$ P& ^
for(j=0;j<h;j++)
8 f$ \3 i* B% f5 D+ u; {! F" o/ F0 @scanf("%d",&a[0][i][j]);
1 I- [! g3 W& @+ k( {}5 {7 P( [1 ~4 g/ e
printf("\n邻接矩阵A为:\n");5 ?3 Q0 ^- z3 L' b' \( Q
for(i=0;i<h;i++)
& z7 x: S- |" I6 t6 \{
- Y, t$ ?; `# U# c; H6 g9 G, e' Sfor(j=0;j<h;j++)4 @% D$ g- s( @" y; W/ n- g
printf(" %d ",a[0][i][j]);
$ e9 B) V; L$ y0 Pprintf("\n");
1 t/ d6 I) y1 l8 q/ I$ U% U6 E1 ]}
, O+ F" k5 ~  Q1 m6 t! S+ jprintf("\n\n\n算法一:\n");
1 P  B+ o1 s  U2 j* R1 x1 ^/ Oprintf("\n矩阵A的1次方为:\n");
! p/ D1 V4 K0 H! M1 Ofor(i=0;i<h;i++)
8 H6 Y2 `2 E( ~: ?# q" Y{8 O! p- p8 U+ U9 k
for(j=0;j<h;j++)
$ H, y$ c6 w: g  e/ lprintf(" %d ",a[0][i][j]);7 q# A7 J+ W, V9 A1 m
printf("\n");
8 z6 V4 A) J0 D% q4 |}( o+ V( q6 Q0 q1 {
micifang(a,h,2);3 a4 C& e. y1 F% W! m& M
for(i=0;i<h;i++)0 j% }  e8 p! v& I( n
for(j=0;j<h;j++)
8 p$ D: b; B) r2 \a[h][i][j]=0; //全部赋值为0!
7 N7 l0 C9 A- A7 Y7 M) efor(i=0;i<h;i++)/ |& R# n( \3 u0 @9 W
for(j=0;j<h;j++), C( _0 I) P+ o! h& ^
for(t=0;t<h;t++)  z8 t; a' ~6 w
a[h][i][j]=a[h][i][j]+a[t][i][j];  i4 s+ p4 g/ o" l7 v2 F
printf("\n\nB的值如下:\n");
  @6 J, g8 n0 O0 S8 Hfor(i=0;i<h;i++)
' P; C3 s  D1 a% E" @{
$ b: F3 N# `: ^# R! ~* W+ \for(j=0;j<h;j++). p) B+ s7 p' U6 n# _! p! \
printf(" %d ",a[h][i][j]);! t/ Z7 F+ |: Z  v
printf("\n");
! C9 w4 g, i" g9 x- [2 y8 i2 r0 L: F4 l}
" y: _& y8 P% D0 x% `printf("\n\n\n算法二:\n");4 E) `! x% z1 _5 x+ c8 f
printf("\n矩阵A的1次布尔幂次方为:\n");4 E4 l- s* @* B  C/ ?; c3 x# t2 n
for(i=0;i<h;i++)( _1 H+ V+ Z* x. h& G. ^
{
5 A- J' K. E2 L; T" x5 }* Cfor(j=0;j<h;j++)
9 {$ l; x& y/ X: S{, G9 O2 ^* H; W  B
if(a[0][i][j]>1)4 S1 G% |4 C5 h
a[0][i][j]=1;
% p! j1 `5 u/ Z  w2 [% rprintf(" %d ",a[0][i][j]);
- b5 L# r9 V% V0 g7 J% m}. l* p( X2 S- `
printf("\n");
4 M# _% g1 a( f% e. A  n8 |}+ E, R1 y4 d9 I4 d6 V
buer(a,h,2);
/ A" x! K8 i4 iprintf("\n\nP的值如下:\n");
: n! |% S7 N: R. p7 O+ F% h+ m0 O! f4 Qfor(i=0;i<h;i++)& c# x3 N% Y8 G2 K! S; g
{, j1 \" F2 D3 c& `" P5 }$ ^
for(j=0;j<h;j++)5 \  X, X" H4 a) i
{ ( c8 D+ J/ y" {8 d2 j6 M
if(a[h][i][j]>1)
6 Z* H, E- [% E5 N. H/ l; @9 ba[h][i][j]=1;. \* c+ }8 O; ]
printf(" %d ",a[h][i][j]);4 D* F: \& ~) E
}
/ E2 J* T$ p# I( E0 I7 V& dprintf("\n");: {+ j/ n) J0 G  _# X* b3 W- u
}4 g$ ?7 @! L' @/ m
printf("\n\n\nwarshall算法:\n\n");7 q6 O) N" N( P( J* M
  [! D  S- G' P0 K1 o
for(i=0;i<h;i++) //处理邻接矩阵A.转化成可达矩阵。
9 ~7 b3 t; J& @# x" \8 d' |# \for(j=0;j<h;j++)( E! l/ j7 ]  x( ]4 Y6 F
if(a[0][i][j]!=0)
) y& Z) S$ {* t4 P, d1 ta[0][i][j]=1;6 q4 E- [: Q8 A0 w; D
printf("整理后的可达矩阵为:\n");
: m- ^8 V% X" Zfor(i=0;i<h;i++)( K. J  b4 W6 n' Z
{1 u2 C* W5 H8 [) u7 V
for(j=0;j<h;j++)7 h: x4 [+ z5 N* |* G$ [) N, c
printf(" %d ",a[0][i][j]);7 k6 M* Z$ w2 O6 u+ N7 c" j$ x8 P
printf("\n");
" w9 Q: F4 r. X4 C" \5 P}7 {2 J/ G8 d$ W
warshall(a,h);- \) l; `( m, H8 S# E8 V
getch();5 h. O% W, J% k* J1 y3 ~* e
}2 A* X: p2 O. d9 t! I
int jisuan(int a[N][N][N],int h,int z,int i,int j)
% L/ L0 g0 ?& w5 @2 V; j/ f{
" M7 a- J$ j  pint s,jg=0;
* r9 u9 e& v* _! [  N: Y; Gif(z==2)' S* U- H( R8 @, i- N
for(s=0;s<h;s++)
+ K% k1 I, }  L: c. U1 N1 Ijg=jg+a[z-2][i][s]*a[z-2][s][j];7 J/ p* w! v6 i4 ^9 l( Y% D1 R
else
7 {( P2 x1 M6 V0 d+ f! A8 C8 ?# Gfor(s=0;s<h;s++)7 m* s; L: m% R! Z* F$ D
jg=jg+a[z-2][i][s]*a[0][s][j];
) P9 Z) v, F6 D8 Dreturn jg; " ?$ T% A; a: Z6 v/ b
}
- Y7 h9 i. ?6 H9 e( a& jvoid micifang(int a[N][N][N],int h,int t)1 L' B! I3 `) X+ Y6 ^
{' Q$ n# y3 t9 T" i) l1 q4 s
int i,j,s=0;
  q) R& f& P& s. Z- \3 z- L) Mint z=t;
7 u% g4 R+ ]/ _( W* ]' X$ X; W; kif(z<h) //矩阵的值不全为零。
" R! s4 H+ t+ ~1 P, }{
$ Y2 ^8 p" n7 g& Kfor(i=0;i<h;i++)
. y+ n# c2 M+ ]" ]for(j=0;j<h;j++)
0 e+ s+ b$ ]9 _9 z' F, o/ \a[z-1][i][j]=0; //全部赋值为0!
: v& s, W) p+ I& i4 H5 U( Hfor(i=0;i<h;i++)
4 ?; s  ?: _' w" D2 O" sfor(j=0;j<h;j++)& O9 a& B* t1 g2 e8 H
a[z-1][i][j]=jisuan(a,h,z,i,j);/ b4 m9 p' H: v
printf("\n矩阵A的%d次方为:\n",z);
9 O9 O& N8 a4 b" n; afor(i=0;i<h;i++)
' u+ x9 L! l8 ?' y5 e{
3 G( [7 g: e5 q- e1 A6 l& Ofor(j=0;j<h;j++)
# u: R5 x3 C8 I+ O6 V" X3 uprintf(" %d ",a[z-1][i][j]);
  i5 y+ f, H2 ]/ q+ ]+ f7 K+ uprintf("\n");
; X$ j  V+ K7 C- F9 W3 e  `, b1 `+ a. }}
6 S4 |" l( Y% g7 S4 Xmicifang(a,h,++z); ! {- a2 S, B: z- x+ w
}
' o8 L( {9 X2 J; i}
3 @1 e" W0 T- l. C8 j9 D$ gvoid buer(int a[N][N][N],int h,int t); p, `0 U* V5 i
{
7 c* K( M/ b/ Q/ |int i,j,s=0;
9 u2 q. ]- ^% r. }int z=t;  g3 E. s1 ?6 T6 x$ ~% S$ C
if(z<h) //矩阵的值不全为零。# }  f; h: T8 L+ ?2 _1 J
{ 4 ~! ]9 E& P- Y' V
for(i=0;i<h;i++)
" F- \# s* M, ?for(j=0;j<h;j++)+ [9 B/ N9 X' ?8 Z0 k
a[z-1][i][j]=0; //全部赋值为0!
  e3 P+ {9 ]$ Pfor(i=0;i<h;i++)/ J4 k# {) J+ L
for(j=0;j<h;j++)( J3 q7 o6 c# ]+ U% C
a[z-1][i][j]=jisuan(a,h,z,i,j);
# j' q) w; b( p; f* i& |printf("\n矩阵A的%d次布尔幂次方为:\n",z);6 T0 T9 D( I! U
for(i=0;i<h;i++); B5 j; r  g' p( P! u' Q& z
{
* {, l, Z' z/ P8 B9 e2 [) ^2 |for(j=0;j<h;j++)) i- q' Y. G! U
{ . Z- j$ ~- n: Q
if(a[z-1][i][j]>1)
  c4 a2 v$ s; C) `7 P; |5 q+ f7 Ya[z-1][i][j]=1;
2 F+ @" \; w6 {. Eprintf(" %d ",a[z-1][i][j]);7 v: G& o/ x& I# z
}
4 L) s2 y& E* P3 k7 pprintf("\n");
$ O: ^$ F) k7 M8 f/ Y' G7 ?# p}
# p+ c1 z) L2 V7 K( p3 x9 z+ O/ mbuer(a,h,++z); ( b0 [% j+ f# W, a3 Z, _1 ]  L
}
5 b$ m$ U3 t6 i% |" P! S}8 I( _6 |. g- D$ B. v& q7 f$ P
void warshall(int a[N][N][N],int h)
0 q0 i1 C7 y1 h9 r2 G% }3 X{
+ T1 e" i' ^* C& {int i,j,p,q,r=0,s;
* E, Q* l$ ]  Rfor(j=0;j<h;j++)
6 D# }2 ?! v; I3 ?for(i=0;i<h;i++)$ J6 d# t& X1 V! g
if(i!=j && a[0][i][j]==1)/ t6 r% A; s# `0 j% u  u1 K% K! ]% \
{
8 W8 Z6 f  N& X0 i% C" d) qfor(s=0;s<h;s++)1 }' `! {  r, n' ^1 U: G" q7 n8 A
{ ) q1 Q! N) D" U$ Z" s8 q
a[0][i][s]=a[0][i][s]+a[0][j][s];% b3 K! ?2 J) U/ }: ^
if(a[0][i][s]==2)
1 e$ c/ o  Z8 T: M8 Ma[0][i][s]=1;+ q  K* D; r+ H# v! {$ v- a6 @
}
& o. p$ C, ~1 `5 ?. M0 o2 Wprintf("\n第%d次运算的结果如下:\n",++r);1 E/ c( j9 t9 L- H+ w% G/ @5 t) ~
for(p=0;p<h;p++)
. n/ l4 {3 g4 [. I; h1 Z' t& r" W{6 _& K$ v5 |. X* l. [! X
for(q=0;q<h;q++)) h2 J' L4 M4 O8 i
printf(" %d ",a[0][p][q]);. a. M% g( M; j
printf("\n");
/ [- ^+ g* N) Y7 w# k}
  N8 V6 f$ B5 }7 c- l; _9 c+ Q}: I" h( ^; R* P
}
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-19 14:31 , Processed in 1.004518 second(s), 61 queries .

    回顶部