pku 1327 Moving Object Recognition 求物体质心

这题没什么好说的。。求一个组合体的质心,还是采取公式
诡异的是这道题在TOJ上过不去。。orz..
 1# include <iostream>
 2# include <cstdio>
 3# include <vector>
 4using namespace std;
 5char map[300][300];
 6int c,r;
 7void dfs(int i,int j,double &x,double &y,int &total)
 8{
 9   if(i<0||i>=r||j<0||j>c||map[i][j]=='.'return;
10   map[i][j]='.';
11   total++;
12   x+=(2*i+1)/2.0;
13   y+=(2*j+1)/2.0;
14   dfs(i-1,j,x,y,total);
15   dfs(i+1,j,x,y,total);
16   dfs(i,j-1,x,y,total);
17   dfs(i,j+1,x,y,total);
18   
19}

20int main()
21{
22    while(true)
23    {
24       vector<double> x,y;
25       scanf("%d%d",&c,&r);
26       if(!c&&!r) break;
27       while(true)
28       {
29          int maxnum=-1;
30          double totalx=0,totaly=0;
31          for(int i=0;i<r;i++)
32            scanf("%s",map[i]);
33          for(int i=0;i<r;i++)
34            for(int j=0;j<c;j++)
35            if(map[i][j]=='x')
36            {
37               double nowx=0,nowy=0;
38               int total=0;
39               dfs(i,j,nowx,nowy,total);
40               if(total>maxnum)
41               {
42                  maxnum=total;
43                  totalx=nowx;
44                  totaly=nowy;
45               }

46            }

47           x.push_back((totalx)/maxnum);
48           y.push_back((totaly)/maxnum);
49           scanf("%s",map[0]);
50           if(map[0][0]=='='break;
51       }

52       double resx=0,resy=0;
53       int T=x.size()/2;
54       for(int i=0;i<x.size()-T;i++)
55       {
56         resx+=(x[i+T]-x[i])/T;
57         resy+=(y[i+T]-y[i])/T;
58       }

59       resx/=T;
60       resy/=T;
61       printf("%.2f %.2f\n",resy+1e-6,resx+1e-6);
62    }

63    return 0;
64}

65
66

posted on 2010-10-19 14:27 yzhw 阅读(223) 评论(0)  编辑 收藏 引用 所属分类: geometry&phycise


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2011年1月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
303112345

导航

统计

公告

统计系统

留言簿(1)

随笔分类(227)

文章分类(2)

OJ

最新随笔

搜索

积分与排名

最新评论

阅读排行榜