二维矩阵实现的多人多车求距离

   
   
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <time.h>
  5. #include <cmath>
  6. using namespace std;
  7. #define M 5000
  8. #define N 50000
  9. #define P 1
  10. struct Point{
  11. int x;
  12. int y;
  13. };
  14. //void mulMatri(int A[M][P],int B[P][N],int C[M][N],int m,int n,int p);
  15. inline void mulMatri(Point** A,Point** B,float** C,int m,int n,int p);
  16. int main()
  17. {
  18. int i,j;
  19. Point** A,**B;
  20. float **C;
  21. A=(Point**)malloc(M*sizeof(Point *));
  22. B=(Point**)malloc(P*sizeof(Point *));
  23. C=(float**)malloc(M*sizeof(float *));
  24. for(i=0;i<M;i++)
  25. A[i]=(Point*)malloc(P*sizeof(Point));
  26. for(i=0;i<P;i++)
  27. B[i]=(Point*)malloc(N*sizeof(Point));
  28. for(i=0;i<M;i++)
  29. C[i]=(float*)malloc(N*sizeof(float));
  30. //int A[M][P],B[P][N],C[M][N];
  31. for(i=0;i<M;i++)
  32. for(j=0;j<P;j++)
  33. {
  34. A[i][j].x=rand()%10;
  35. A[i][j].y=rand()%10;
  36. }
  37. for(i=0;i<P;i++)
  38. for(j=0;j<N;j++)
  39. {
  40. B[i][j].x=rand()%10;
  41. B[i][j].y=rand()%10;
  42. }
  43. clock_t start,finish;
  44. start=clock();
  45. mulMatri( A,B,C,M,N,P);
  46. finish=clock();
  47. printf("%f ms\n",(float)(finish-start));
  48. system("pause");
  49. for(i=0;i<M;i++){
  50. for(j=0;j<P;j++)
  51. cout<<"("<<A[i][j].x<<","<<A[i][j].y<<") ";
  52. cout<<endl;
  53. }
  54. for(i=0;i<P;i++){
  55. for(j=0;j<N;j++)
  56. cout<<"("<<B[i][j].x<<","<<B[i][j].y<<") ";
  57. cout<<endl;
  58. }
  59. for(i=0;i<M;i++){
  60. for(j=0;j<N;j++)
  61. cout<<C[i][j]<<" ";
  62. cout<<endl;
  63. }
  64. for(i=0;i<M;i++)
  65. free(A[i]);
  66. for(i=0;i<P;i++)
  67. free(B[i]);
  68. for(i=0;i<M;i++)
  69. free(C[i]);
  70. free(A);
  71. free(B);
  72. free(C);
  73. return 0;
  74. }
  75. //void mulMatri(int A[M][P],int B[P][N],int C[M][N],int m,int n,int p)
  76. inline void mulMatri(Point** A,Point** B,float** C,int m,int n,int p)
  77. {
  78. int i,j,k;
  79. for(i=0;i<m;i++)
  80. {
  81. float min_value,min_idx;
  82. min_value=10;
  83. for(j=0;j<n;j++)
  84. {
  85. for(k=0;k<p;k++)
  86. {
  87. int x=A[i][k].x-B[k][j].x;
  88. int y=A[i][k].y-B[k][j].y;
  89. C[i][j]=sqrt(x*x+y*y);//不要使用pow,太慢
  90. /*if(C[i][j]<min_value)
  91. {
  92. min_value=C[i][j];
  93. min_idx=j;
  94. }*/
  95. }
  96. }
  97. //cout<<"person="<<i<<" "<<"car="<<min_idx<<endl;
  98. }
  99. }





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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值