【♂Not The Triumph♂O(∩_∩)O哈哈~But The Struggle♂】

竞赛决不是捷径,它只是另一种艰辛的生活方式。得到与失去,只有时间会去评判;成功与失败,只有历史能去仲裁。我不会永远成功,正如我不会永远失败一样

  C++博客 :: 首页 :: 联系 ::  :: 管理
  6 Posts :: 239 Stories :: 25 Comments :: 0 Trackbacks

常用链接

留言簿(7)

我参与的团队

搜索

  •  

积分与排名

  • 积分 - 108422
  • 排名 - 229

最新评论

阅读排行榜

评论排行榜

对图像进行编码有好几种方法。在这里我们考虑2种方法。假设图像只是有黑白两种象素组成,至少有一个黑色象素,而且所有的黑象素都在边界上相连。黑象素不少于1,不多于10。以下为一个例子:

2种编码方法都是只对黑色象素而言。
第一种编码方法:在首行指定黑色象素的个数,以下为每个黑色象素的坐标。象素是以x坐标递增排列的,当x坐标相同时,以y坐标递增顺序给出。上图的编码方法如下:
6
2 3
2 4
3 3
3 4
4 2
4 3

第二种编码方法:首行指定左下角的黑色象素的坐标。以下每行为与它相邻的象素的描述。先是左下角的象素,然后是与它相邻的第一个象素A(如果存在的话),再是与它相邻的第二个象素B(如果存在的话)。当所有相邻的象素都描述完了,接下来就是与A相邻的象素的描述,再是与B相邻的象素的描述,如此类推。
只用一个字母表示相邻,R:在右,T:在上, L:在左,B:在下。一行为一个象素的相邻描述。同一象素不出现2次,如果之前已经描述过,就不用重复描述了。是从右开始,按逆时针方向描述的。每一行的描述以","结束,最后一行的","则改为"."表示文件结束。上图的编码如下:
2 3
RT,
RT,
,
B,
,
.

每一行之前没有空格,结尾也没有空格,在x,y坐标间只有一个空格

input:
给定一种编码方法

output:
输出另一种编码方法

input:
6
2 3
2 4
3 3
3 4
4 2
4 3

output:
2 3
RT,
RT,
,
B,
,
.

【参考程序】:
#include<iostream>
#include
<string>
using namespace std;
const int dx[4]={1,0,-1,0};
const int dy[4]={0,1,0,-1};
const string dir[4]={"R","T","L","B"};
struct node
{
    
int x,y;
} list[
101];
int MAP[11][11];
int n,head,tail;
bool check1(int xx,int yy)
{
    
if (xx>=1 && xx<=&& yy>=1 && yy<=&& MAP[xx][yy]==1
        
return true;
    
return false;
}
void BFS1(int xx,int yy)
{
    head
=tail=1;list[1].x=xx;list[1].y=yy;
    MAP[xx][yy]
=0;
    
while (head<=tail)
    {
        
for (int i=0;i<=3;i++)
        {
            
int tx,ty;
            tx
=list[head].x+dx[i];
            ty
=list[head].y+dy[i];
            
if (check1(tx,ty))
            {
                tail
++;
                list[tail].x
=tx;list[tail].y=ty;
                cout
<<dir[i];
                MAP[tx][ty]
=-1;
            }
        }
        
if (head==tail) cout<<"."<<endl;
        
else cout<<","<<endl;
        head
++;
    }
}
void add(int xx,int yy)
{
    
if (!MAP[xx][yy])
    {
        tail
++;
        list[tail].x
=xx;list[tail].y=yy;
    }
}
int cmp(const void *s,const void *t)
{
    node i
=*(node *)s,j=*(node *)t;
    
if (i.x!=j.x) return i.x-j.x;
    
else return i.y-j.y;
}
int main()
{
    
string s;
    getline(cin,s);
    memset(MAP,
0,sizeof(MAP));
    
if (s.size()<=2)
    {
        
if (s.size()==1) n=s[0]-'0';
        
else n=(s[0]-'0')*10+s[1]-'0';
        
int x,y,a,b;
        
for (int i=1;i<=n;i++)
        {
            cin
>>x>>y;
            
if (i==1
            {
                a
=x;b=y;
            }
            MAP[x][y]
=1;
        }
        cout
<<a<<" "<<b<<endl;
        BFS1(a,b);
    }
    
else 
    {
        
int p=s.find(" ");
        
int n=0,m=0;
        
for (int i=0;i<p;i++) n=n*10+s[i]-'0';
        
for (int i=p+1;i<s.size();i++) m=m*10+s[i]-'0';
        list[
1].x=n;list[1].y=m;head=tail=1;
        
int tx,ty;
        
while (head<=tail)
        {
            getline(cin,s);
            
for (int i=0;i<s.size();i++)
                
if (s[i]=='R')
                {
                    tx
=list[head].x+1;ty=list[head].y;
                    add(tx,ty);
                }
                
else if (s[i]=='T')
                {
                    tx
=list[head].x;ty=list[head].y+1;
                    add(tx,ty);
                }
                
else if (s[i]=='L')
                {
                    tx
=list[head].x-1;ty=list[head].y;
                    add(tx,ty);
                }
                
else if (s[i]=='B')
                {
                    tx
=list[head].x;ty=list[head].y-1;
                    add(tx,ty);
                }
            head
++;
        }
        cout
<<tail<<endl;
        qsort(list
+1,tail,sizeof(node),cmp);
        
for (int i=1;i<=tail;i++)
            cout
<<list[i].x<<" "<<list[i].y<<endl;
    }
    
return 0;
}

posted on 2009-05-28 21:25 开拓者 阅读(198) 评论(0)  编辑 收藏 引用 所属分类: URAL 题解

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