您的位置:首页 > 其它

poj Matrix 回溯,递归,虽然对于很多人是水题,但我感觉这道题听好的嘛!!!!!!!!!!!

2011-08-17 10:48 148 查看
我一开始看这道题,以为就是简单爆搜数据也不大,认为水题一个,飞速将代码打上,结果连样例都没过,仔细一想我的这种暴力太低级了,还想着n多大就套几个for循环,太呆了,我也就不说什么了,后来看了别人的回溯递归,豁然开朗啊!!
这道题我想应该对回溯有一定的理解,我当初就没理解好,以至于不会用,这个回溯递归很好的解决我的有几个n就套几个for循环的白痴想法

#include<iostream>

using namespace std;

int n;

int a[10][10];

int max()// 求每个矩阵的最大列和

{

int sum=-0xFFFF;

for(int j=1;j<=n;j++)

{

int cou=0;

for(int i=1;i<=n;i++)

cou+=a[i][j];

if(cou>sum)

sum=cou;

}

return sum;

}

int min1;

void move(int i)//行移动

{

int temp=a[i][1];

for(int j=1;j<n;j++)

a[i][j]=a[i][j+1];

a[i]
=temp;

}

void solve(int i)//递归移动求和

{

if(i>=n)//核心,只有当i移到最下面才开始计算

{

int t=max();

if(t<min1)

min1=t;

}

else

{

int temp=n;

while(temp--)//移动n次

{

move(i);//移动当前行

solve(i+1);//解决下一行问题

}

}

}

int main()

{

while(scanf("%d",&n),n!=-1)

{

for(int i=1;i<=n;i++)

{

for(int j=1;j<=n;j++)

scanf("%d",&a[i][j]);

}

min1=0xFFFF;

solve(1);

cout<<min1<<endl;

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: