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

我一开始看这道题,以为就是简单爆搜数据也不大,认为水题一个,飞速将代码打上,结果连样例都没过,仔细一想我的这种暴力太低级了,还想着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][n]=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;
}
  

你可能感兴趣的:(poj Matrix 回溯,递归,虽然对于很多人是水题,但我感觉这道题听好的嘛!!!!!!!!!!!)