zzuli 1922
2016-08-26 10:25
113 查看
1922: A
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 54 Solved: 9
SubmitStatusWeb
Board
Description
给定一个4*4的01棋盘,1代表棋子,0代表空格,棋子1每次可以移动到相邻上下左右四个位置的空格。然后再给定你目标棋盘,问你最少在多少步能把当前棋盘变成目标棋盘状态。
Input
第一行输入一个整数t,代表有t组测试数据。接下来给出只有0和1的4*4的当前棋盘和4*4的目标棋盘,中间有一个空行。
Output
输出一个整数表示最小的步数,若不能到达输出-1.Sample Input
1
0001
0011
1100
1111
1011
1101
0000
1101
Sample Output
8这题直接暴力就能过,我还用KM写了很久,,,,,,可能是定式思维毒害太深了,,,,,
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <climits>
#include <algorithm>
using namespace std;
const int N = 110;
const int inf = 0x3f3f;
int visit1[10][10], visit2[10][10], flag
;
int wight
;
struct node
{
int x, y;
}p1[100], p2[100];
void km();
int l, r;
int dfs(int x);
int main()
{
int t;
scanf("%d", &t);
while(t--)
{
memset(visit1,0,sizeof(visit1));
memset(visit2,0,sizeof(visit2));
int num1=0, num2=0;
for(int i=1;i<=4;i++)
{
for(int j=1;j<=4;j++)
{
scanf("%1d", &visit1[i][j]);
if(visit1[i][j])
{
num1++;
}
}
}
for(int i=1;i<=4;i++)
{
for(int j=1;j<=4;j++)
{
scanf("%1d", &visit2[i][j]);
if(visit2[i][j])
{
num2++;
}
}
}
if(num1!=num2)
{
printf("-1\n");
continue;
}
memset(p1,0,sizeof(p1));
memset(p2,0,sizeof(p2));
l=0, r=0;
for(int i=1;i<=4;i++)
{
for(int j=1;j<=4;j++)
{
if(visit1[i][j]==0&&visit2[i][j]==1)
{
p2[r].x=i, p2[r].y=j;
r++;
}
else if(visit1[i][j]==1&&visit2[i][j]==0)
{
p1[l].x=i, p1[l].y=j;
l++;
}
}
}
memset(flag,0,sizeof(flag));
int sum=0;
for(int i=0;i<l;i++)
{
int tmp=inf, v;
for(int j=0;j<r;j++)
{
wight[i][j]=abs(p1[i].x-p2[j].x)+abs(p1[i].y-p2[j].y);
if(tmp>wight[i][j]&&flag[j]==0)
{
tmp=wight[i][j];
v=j;
}
}
sum+=tmp;
flag[v]=1;
}
printf("%d\n",sum);
}
return 0;
}
相关文章推荐
- zzuli 1922 (棋盘)
- zzuli 1922 (暴力)
- 棋盘zzuli 1922
- ZZULI 1922: A
- poj 1922
- zzuli 1480 欧拉图
- zzuli 1627大整数减法
- ZZULI 1209 二叉树(2)
- ZZULI_SummerPractice(6) HDU 390…
- ZZULI_TEAM_PRACTICE(1) HDU 1251…
- ZZULI 1617 (HDU 1686)Oulipo (…
- zzuli 1150: 组合三位数之一(函数专题)
- POJ 1922 Ride to School
- ZZULI - 1705 && 1706 && 1707 && 1708 && 1709 && 1710 && 1711 && 1712
- zzuli求最大值
- OJ 1922 猴子分桃
- zzuli 1728: 社交网络(求期望值)
- bzoj 1922(dijkstra)
- zzuli 1899 985的最大和难题
- 【zzuli-oj】-1900- 985的“树”难题(DFS & 并查集&STL)