ericazou 发表于 2007-9-8 21:06:45

一道矩阵统计的编程题

有一个二维字符型矩阵,其中已经有两种数据:‘0’和‘F’。
要求,将字符‘0’替换成周围8个‘F'的个数,并输出替换前后对比。
如:原始矩阵         替换后矩阵
0 0 f 0 f            0 1 f 4 f
0 0 0 f f            1 2 2 f f
f 0 0 0 0            f 1 1 2 2
(暂定为5列)
我自己写了一个函数,比较繁琐,应该有更简洁的办法。
请大家帮我想想。

在VC6.0中编译通过。
void statmap(char Arr[],int row,int col)
{
        int i,j;
        int count;
        for (i=0;i<row;i++)
                for (j=0;j<col;j++)
               
                {
                        if ('f'!=Arr)        //判断字符是否为零
                        {
                                count=0;
                                if((0<i&&i<row-1) &&(0<j&&j<col-1))//判断不在特殊位置
                                {
                                        if('f'==Arr)        count++;                                       
                                        if('f'==Arr)        count++;
                                        if('f'==Arr)        count++;
                                        if('f'==Arr)        count++;

                                        if('f'==Arr)        count++;
                                        if('f'==Arr)        count++;
                                        if('f'==Arr)        count++;
                                        if('f'==Arr)        count++;
                                }
                                //判断在特殊位置
                                else if (i==0)//判断在第一行
                                {
                                        if (0<j&&j<col-1)//判断不是在两头
                                        {
                                                if('f'==Arr)        count++;
                                                if('f'==Arr)        count++;
                                                if('f'==Arr)        count++;
                                                if('f'==Arr)        count++;
                                                if('f'==Arr)        count++;
                                        }
                                        else
                                        {       
                                                if(j==0)//判断是在点(0,0)
                                                {
                                                        if('f'==Arr)        count++;                                                       
                                                        if('f'==Arr)        count++;
                                                        if('f'==Arr)        count++;
                                                }
                                                else// 点(0,col-1)
                                                {
                                                        if('f'==Arr)        count++;                                                       
                                                        if('f'==Arr)        count++;
                                                        if('f'==Arr)        count++;
                                                       
                                                }
                                        }
                                }
                                else if (i==row-1)//判断在最后一行
                                {
                                        if (0<j&&j<col-1)
                                        {
                                                if('f'==Arr)        count++;
                                                if('f'==Arr)        count++;
                                                if('f'==Arr)        count++;
                                                if('f'==Arr)        count++;
                                                if('f'==Arr)        count++;       
                                        }
                                        else
                                        {
                                                if(j==0) //点(row-1,0)
                                                {       
                                                        if('f'==Arr)        count++;
                                                        if('f'==Arr)        count++;                                                       
                                                        if('f'==Arr)        count++;
                                                }
                                                else//点(row-1,col-1)
                                                {
                                                        if('f'==Arr)        count++;                                                       
                                                        if('f'==Arr)        count++;
                                                        if('f'==Arr)        count++;                                                               
                                                }
                                        }
                                }
                                else if (j==0&&0<i&&i<row-1)//判断在第一列的中间部分
                                {
                                                if('f'==Arr)        count++;
                                                if('f'==Arr)        count++;
                                                if('f'==Arr)        count++;
                                                if('f'==Arr)        count++;
                                                if('f'==Arr)        count++;
                                }
                                else if (j==col-1&&0<i&&i<row-1)
                                {
                                                if('f'==Arr)        count++;
                                                if('f'==Arr)        count++;
                                                if('f'==Arr)        count++;
                                                if('f'==Arr)        count++;
                                                if('f'==Arr)        count++;
                                }
                               
                                Arr=count+'0';
                        }
                       
                       
                }
}

Jor 发表于 2007-9-8 22:42:54

扫雷? 不错哈 ````````

ericazou 发表于 2007-9-12 10:10:33

竟然没有人去优化我的算法

puchonghui 发表于 2007-9-12 12:02:54

我觉得是不是可以倒过来遍历
判定一个元素是不是f
是f的话周围非f元素+1
另外遍历的时候外边一圈是不是可以考虑分开来写
里面的循环从第二行第二列开始

唔。。不知道这样能不能稍微简化些。。
页: [1]
查看完整版本: 一道矩阵统计的编程题