正文

位图2007-08-13 17:18:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/lingdlz/28463.html

分享到:

位图
Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:32768KB
Total submit users: 50, Accepted users: 43
Problem 10109 : No special judgement
Problem description
现在我们给出一个n×m的单色位图,且该为图中至少含有一个白色的像素。我们用(i, j)来代表第i行第j列的像素,并且定义两点p1=(i1, j1)和p2=(i2, j2)之间的距离为: d(p1, p2)=|i1 - i2| + |j1 - j2|
请写一个程序:
读入该位图;对于每个像素,计算出离该像素最近的白色像素与它的距离。

Input
第一行包括两个用空格分开的整数n和m,1<=n<=182,1<=m<=182。以下的n行每行包括一个长度为m的用0和1组成的字符串,在第i+1行的第j个字符如果为”1”,那么表示像素(i, j)为白的,否则为黑的。

Output
输出一个n×m的数表,其中的第i行的第j个数字为f(i, j)表示像素(i, j)到最近的白色像素的距离。

Sample Input
3 4
0001
0011
0110
Sample Output
3 2 1 0
2 1 0 0
1 0 0 1
#include <iostream>
#include <list>
using namespace std;

#define MAX_BIT 200

int  gm[MAX_BIT][MAX_BIT];
char gs[MAX_BIT];
class node{
public:
    int i,j;
    node(int a=0, int b=0):i(a),j(b){}
    void set(int a, int b){ i=a; j=b; }
};
void get(int i,int j,int value){
    node a[4];
    int  it=0,jt;
    if(gm[i-1][j]==-1 || gm[i-1][j]>value)
        a[it++].set(i-1,j);
    if(gm[i+1][j]==-1 || gm[i+1][j]>value)
        a[it++].set(i+1,j);
    if(gm[i][j-1]==-1 || gm[i][j-1]>value)
        a[it++].set(i,j-1);
    if(gm[i][j+1]==-1 || gm[i][j+1]>value)
        a[it++].set(i,j+1);
    for(jt=0; jt<it; jt++){
        gm[a[jt].i][a[jt].j] = value;
        get(a[jt].i,a[jt].j,value+1);
    }
}

int main(){
    int i,j,n,m;
    list<node> t;
    cin>>n>>m;
    for(i=0; i<=m+1; i++)
        gm[0][i]=gm[n+1][i]=0;
    for(i=1; i<=n; i++){
        cin>>&gs[1];
        gm[i][0]=gm[i][m+1]=0;
        for(j=1; j<=m; j++)
            if(gs[j]=='1'){
                gm[i][j] = 0;
                t.push_back(node(i,j));
            }else
                gm[i][j] =-1;
    }
    for(list<node>::iterator it=t.begin(); it!=t.end(); it++)
        get((*it).i,(*it).j,1);
    for(i=1; i<=n; i++){
        for(j=1; j<m; j++)
            cout<<gm[i][j]<<' ';
        cout<<gm[i][j]<<endl;;
    }
    return 0;
}

阅读(2978) | 评论(1)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册