java 二维数组 floyd_利用指针访问二维数组实现floyd算法

#include

//floyd算法实现

//定义一个无限大值,表示无法直接通过的两个点

#define INF 999

//初始化一个n*n的数组存储所要表示的图

#define N 3

int a [N][N] ;

//creat函数,用于初始化数组

int* creat (){

for(int i = 0 ;i

for(int j = 0 ;j

if(i==j)

a[i][j] = 0 ;

else a[i][j] = INF ;

}

}

int* p = NULL ;

p = a[0];

return p ;

}

//填充矩阵(输入图数据)

int * insert(int* p ){

for(int i = 0 ;i

for(int j = 0;j

if(i!=j){

printf("请输入第%d城市到第%d城市的距离\n",i+1,j+1);

scanf("%d",(p+i*N+j));

}

}

}

return p ;

}

//创建弗洛伊德算法(三个嵌套for循环)

int* floyd(int* p ){

for(int k = 0;k

for(int i = 0; i

for(int j = 0 ; j

if(*(p+i*N+j)>*(p+i*N+k)+*(p+k*N+j))

*(p+i*N+j)=*(p+i*N+k)+*(p+k*N+j); //使用指针对二维数组内容进行修改,等价于a[i][j]=a[i][k]+a[k][j]

}

}

return p ;

}

//遍历二维数组a[N][N]

void show(int* p ){

for(int i = 1 ;i<=N*N;i++){

printf("%6d",*(p+i-1));

if(i>0&&i%N==0)printf("\n");

}

}

int main(void){

int* p = creat();

insert(p);

floyd(p);

show(p);

return 0 ;

}

------------------------------------------------------------------------------------------------

输出内容:

请输入第1城市到第2城市的距离

2

请输入第1城市到第3城市的距离

33

请输入第2城市到第1城市的距离

6

请输入第2城市到第3城市的距离

7

请输入第3城市到第1城市的距离

44

请输入第3城市到第2城市的距离

12

0    2    9

6    0    7

18  12   0

--------------------------------

佛洛依德算法就是一个暴力求解有中转点的两个地点之间最短距离的方法。k变量是循环的关键,相当于把两点之间的中转点遍历了一遍。

实际上是非常简单无脑暴力的算法。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值