C语言计算矩阵的局部最小值

我想请教一下怎么用C语言,求一个二维数组建成的矩阵的局部最小值
比如说矩阵为这样的:
3563214
1433211
4376855

3563214
(1)433211
4(3)76855
被我用括号选中的为它的局部最小值,所谓的局部最小值就是让它和它的上下右左的数进行大小比较,如果这个数都比它的上下左右的数小(不包括对角线),则称它为局部最小,
要出给出可以运行的C源码 输出具体的局部最小值,并注明它所在的行,和列,最后统计局部最小值的个数

void FindPrintLocMin(int **pMatrix,int Rows,int Cols,char *pFileOut,char * Mode )
{
int sum=0;
for(int i=0;i<Rows;i++)
{
for(int j=0;j<Cols;j++)
{
if(i!=0)
if(pMatrix[i][j]>=pMatrix[i-1][j]) continue;
if(i!=Rows-1)
if(pMatrix[i][j]>=pMatrix[i+1][j]) continue;
if(j!=0)
if(pMatrix[i][j]>=pMatrix[i][j-1]) continue;
if(j!=Cols-1)
if(pMatrix[i][j]>=pMatrix[i][j+1]) continue;
printf("the local min is %d its row number is %d,its col number is %d\n",pMatrix[i][j],i,j);
sum++;
}
}
if(sum==0)
{
printf("no local min!\n");
}
else
{
printf("find %d local min(s)!\n",sum);
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-11-28
咯咯.思路十分清晰
#include <stdio.h>
#include <math.h>
#define N 4
main()
{
int a[N][N],i,j,sign;
printf("Input a %d*%d array:\n",N,N);
for(i=0;i<N;i++)
for(j=0;j<N;j++)
scanf("%d",&a[i][j]);
for(i=0;i<N;i++)
for(j=0;j<N;j++)
{
sign=1;
if(i!=0)
if(!(a[i][j]<a[i-1][j]))
sign=0;
if(i!=N-1)
if(!(a[i][j]<a[i+1][j]))
sign=0;
if(j!=0)
if(!(a[i][j]<a[i][j-1]))
sign=0;
if(j!=N-1)
if(!(a[i][j]<a[i][j+1]))
sign=0;
if(sign)
printf("(%d,%d)%d\n",i,j,a[i][j]);
}
}

//验证成功 结果正确
第2个回答  2009-11-28
#include<string.h>
#include <stdio.h>
int xz[]={0,0,-1,1};
int yz[]={1,-1,0,0};
int main()
{
int data[100][100];
int m,n;
int i,j;
int p;
int x,y;
int count=0;
int flag=1;
printf("请输入行数和列数\n");
scanf("%d%d",&m,&n);
for(i=0;i<m;i++)
for(j=0;j<m;j++)
{
scanf("%d",&data[i][j]);
}
printf("你输入的矩阵如下:\n");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
printf("%d ",data[i][j]);
for(p=0;p<4;p++)
{
x=i+xz[p],y=j+yz[p];
if((x>=0&&x<4)&&(y>=0&&y<4))
{
if(data[i][j]>=data[x][y])
flag=0;
}
}
if(flag)
{
count++;
}
flag=1;
}
printf("\n");
}
printf("局部最小值总数:%d\n",count);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
for(p=0;p<4;p++)
{
x=i+xz[p],y=j+yz[p];
if((x>=0&&x<4)&&(y>=0&&y<4))
{
if(data[i][j]>=data[x][y])
flag=0;
}
}
if(flag)
{
printf("%d %d %d\n",i+1,j+1,data[i][j]);
}
flag=1;
}
}
return 0;

}
输入格式:
3 3
1 2 3
3 1 4
5 6 7
输入上面的格式会看到结果。
有不明白的hi我。
第3个回答  2009-11-28
你连基本的输出时什么格式都没有说,叫别人怎么编,你要说明是要输出数组的值还是只要数组的位置。
相似回答