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

来源:互联网 发布:步步高9688软件下载 编辑:程序博客网 时间:2024/05/16 02:02
  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. }



来自为知笔记(Wiz)


0 0
原创粉丝点击