【HDOJ 5402】Travelling Salesman Problem
一开始以为是搜索 仔细画了画发现就一模拟
奇数行或奇数列的时候怎么走都能全走完
偶数行偶数列的时候就要挑了
. * . * . *
* . * . * .
. * . * . *
* . * . * .
以4*6为例(如上图
星号可以保证不取其中一个可遍历完全图 点好的话就会连带一些星号
所以绕过星号中的最小值 是最佳遍历方式 输入的时候找到最小值并记录下行列 遍历到改行前以 右走到头 下 左走到头 下 右走到头这种方式走 直到走到该行 以下右上右下(第奇数行) 或下左上左下(第偶数行)接着走 直到走到星星列 多向右/向左走一步 即绕过他 然后接着这样走 保证遍历完即可
注意如果星星在最后一行要特判 从倒二行就要开始走右下右的方式
总之就是各大模拟
代码有点冗长 凑合看
#include <iostream>
#include <cstdio>
#define INF 0x3f3f3f3f
using namespace std;
int mp[101][101];
int main()
{
int i,j,n,m,mm,x,y,s,z;
while(~scanf("%d %d",&n,&m))
{
mm = INF;
s = 0;
for(i = 1; i <= n; ++i)
{
for(j = 1; j <= m; ++j)
{
scanf("%d",&mp[i][j]);
if(i&1)
{
if((m-j)%2 == 0 && mm > mp[i][j])
{
mm = mp[i][j];
x = i;
y = j;
}
}
else
{
if((j-1)%2 == 0 && mm > mp[i][j])
{
mm = mp[i][j];
x = i;
y = j;
}
}
s += mp[i][j];
}
}
if(n&1)
{
printf("%d\n",s);
for(i = n-1; i >= 0; --i)
{
for(j = 1; j < m; ++j)
{
if(i&1)
{
putchar(‘L‘);
}else putchar(‘R‘);
}
if(i) putchar(‘D‘);
}
printf("\n");
continue;
}
else if(m&1)
{
printf("%d\n",s);
for(j = m-1; j >= 0; --j)
{
for(i = 1; i < n; ++i)
{
if(j&1)
{
putchar(‘U‘);
}else putchar(‘D‘);
}
if(j) putchar(‘R‘);
}
printf("\n");
continue;
}
printf("%d\n",s-mm);
for(i = 1; i <= n; ++i)
{
if(i == x || (i == x-1 && x == n)) break;
for(j = 1; j < m; ++j)
{
if(i&1)
{
putchar(‘R‘);
}else putchar(‘L‘);
}
if(i) putchar(‘D‘);
}
if(i&1)
{
for(j = 1; j < m; ++j)
{
if(j == y) break;
if(j&1)
putchar(‘D‘);
else putchar(‘U‘);
putchar(‘R‘);
}
if(j != m)putchar(‘R‘);
for(++j; j < m; ++j)
{
if(j&1)
putchar(‘U‘);
else putchar(‘D‘);
putchar(‘R‘);
}
}
else
{
for(j = m; j > 1; --j)
{
if(j == y) break;
if(j&1)
putchar(‘U‘);
else putchar(‘D‘);
putchar(‘L‘);
}
if(j != 1)putchar(‘L‘);
for(--j; j > 1; --j)
{
if(j&1)
putchar(‘D‘);
else putchar(‘U‘);
putchar(‘L‘);
}
}
if((i&1 && y != m) || (i%2 == 0 && y != 1)) putchar(‘D‘);
if(i+1 < n) putchar(‘D‘);
for(i += 2; i <= n; ++i)
{
for(j = 1; j < m; ++j)
{
if(i&1)
{
putchar(‘L‘);
}else putchar(‘R‘);
}
if(i != n) putchar(‘D‘);
}
printf("\n");
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-09 23:02:36