poj 2078 Matrix

#include<iostream>        //搜索题
using namespace std;
int n,table[10][10],m,s,mx;
void backtrack(int r)
{
if(r==n)
{
m
=0;
for(int j=0;j<n;++j)
{
s
=0;
for(int i=0;i<n;++i)
{
s
+=table[i][j];
if(s>=mx) //剪枝
return ;
}
m
=max(s,m);
}
mx
=min(mx,m);
}
else
{
int t=n;
while(t--)
{
int p=table[r][n-1];
for(int j=n-1;j>0;--j)
table[r][j]
=table[r][j-1];
table[r][
0]=p;
backtrack(r
+1);
}
}
}
int main()
{
while(cin>>n&&n!=-1)
{
for(int i=0;i<n;++i)
for(int j=0;j<n;++j)
cin
>>table[i][j];
mx
=999999;
backtrack(
0);
cout
<<mx<<endl;
}
return 0;
}

  

posted on 2011-07-22 20:12  sysu_mjc  阅读(161)  评论(0编辑  收藏  举报

导航