现在的位置: 首页 > 综合 > 正文

一个基于命令行的“距离变换”的实现

2013年10月06日 ⁄ 综合 ⁄ 共 1990字 ⁄ 字号 评论关闭
今天上网刚刚写的,代码有点粗糙,vc6下编译通过。
希望对将来的工作有所帮助。

  1. #include <stdio.h>
  2. int bitmap[10][10]={
  3.     0,0,0,0,0,0,0,0,0,0,
  4.     0,0,0,1,1,1,1,1,0,0,
  5.     0,1,1,1,1,1,1,1,0,0,
  6.     0,1,1,1,1,1,1,1,1,0,
  7.     0,1,1,1,1,1,1,1,1,0,
  8.     0,1,1,1,1,1,1,1,1,0,
  9.     0,0,0,1,1,1,1,1,1,0,
  10.     0,0,0,1,1,1,1,1,0,0,
  11.     0,1,1,1,1,1,1,0,0,0,
  12.     0,1,1,0,1,1,0,0,0,0
  13. };
  14. int mask1[3][3]={
  15.     7,5,7,
  16.     5,-1,0,
  17.     0,0,0
  18. };
  19. int mask2[3][3]={
  20.     0,0,0,
  21.     0,-1,5,
  22.     7,5,7
  23. };
  24. void printBitmap()
  25. {
  26.     for (int i=0;i<10;i++)
  27.     {
  28.         for (int j=0;j<10;j++)
  29.         {
  30.             printf("%d",bitmap[i][j]);
  31.         }
  32.         printf("/n");
  33.     }
  34. }
  35. int main()
  36. {
  37.     int g=0;
  38.     for (int i=1;i<9;i++)
  39.     {
  40.         for (int j=0;j<9;j++)
  41.         {
  42.             if (bitmap[i][j]==0)
  43.             {
  44.                 continue;
  45.             }
  46.             g=99;
  47.             int t=0;
  48.             for (int ii=0;ii<3;ii++)
  49.             {
  50.                 for (int jj=0;jj<3;jj++)
  51.                 {
  52.                     if (mask1[ii][jj]<0) break;
  53.                     
  54.                     if (mask1[ii][jj]==0) continue;
  55.                     t=bitmap[i-1+ii][j-1+jj]+mask1[ii][jj];
  56.                     if (t<g) g=t;
  57.                 }
  58.                 if (mask1[ii][jj]<0) break;
  59.             }
  60.             bitmap[i][j]=g;
  61.         }
  62.     }
  63.     for (i=8;i>0;i--)
  64.     {
  65.         for(int j=8;j>0;j--)
  66.         {
  67.             if (bitmap[i][j]==0) continue;
  68.             g=99;
  69.             int t=0;
  70.             for (int ii=2;ii>=0;ii--)
  71.             {
  72.                 for (int jj=2;jj>=0;jj--)
  73.                 {
  74.                     if (mask2[ii][jj]<0) break;
  75.                     
  76.                     if (mask2[ii][jj]==0) continue;
  77.                     
  78.                     t=bitmap[i-1+ii][j-1+jj]+mask2[ii][jj];
  79.                     if(t<g) g=t;
  80.                 }
  81.                 if (mask2[ii][jj]<0) break;
  82.             }
  83.             if (bitmap[i][j]>g) bitmap[i][j]=g;                 
  84.         }
  85.     }
  86.     for (i=0;i<10;i++)
  87.     {
  88.         for (int j=0;j<10;j++)
  89.         {
  90.             bitmap[i][j] /=5;
  91.         }
  92.     }
  93.     printBitmap();
  94.     return 0;
  95. }

抱歉!评论已关闭.