矩阵最大值
给你一个N*M的矩阵,矩阵的每个格子都有相应的权值。而且走棋招法要求不许后退,满足象棋中的兵路、士路或者马路,具要求如下图
#include<iostream.h>
#include<malloc.h>
void main()
{
int arr[4][4]={{0,2,5,8},{7,9,-1,-5},{-5,8,12,-2},{5,8,19,1}};
int m=4,n=4;
int **way=(int **)malloc(sizeof(int *)*m);//用来存储路径的最大值
int i,j;
for(i=0;i<m;i++)
way[i]=(int *)malloc(sizeof(int)*n);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
way[i][j]=0;
for(i=0;i<n;i++)
way[0][i]=arr[0][i];
for(i=1;i<m;i++)
{
for(j=0;j<n;j++)
{
int temp=0;
if(i-2>=0&&j-1>=0)
{
temp=arr[i][j]+way[i-2][j-1];
if(temp>way[i][j])
way[i][j]=temp;
}
if(i-2>=0&&j+1<n)
{
temp=arr[i][j]+way[i-2][j+1];
if(temp>way[i][j])
way[i][j]=temp;
}
if(i-1>=0&&j-2>=0)
{
temp=arr[i][j]+way[i-1][j-2];
if(temp>way[i][j])
way[i][j]=temp;
}
if(i-1>=0&&j+2<n)
{
temp=arr[i][j]+way[i-1][j+2];
if(temp>way[i][j])
way[i][j]=temp;
}
if(i-1>=0&&j-1>=0)
{
temp=arr[i][j]+way[i-1][j-1];
if(temp>way[i][j])
way[i][j]=temp;
}
if(i-1>=0&&j+1<n)
{
temp=arr[i][j]+way[i-1][j+1];
if(temp>way[i][j])
way[i][j]=temp;
}
if(i-1>=0)
{
temp=arr[i][j]+way[i-1][j];
if(temp>way[i][j])
way[i][j]=temp;
}
}
}
int max=way[m-1][0];
for(i=1;i<n;i++)
if(way[m-1][i]>max)
max=way[m-1][i];
cout<<max<<endl;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
cout<<way[i][j]<<" ";
cout<<endl;
}
}