标签:chapaev and potatoes ural 1809 暴力
Time Limit: 500MS | Memory Limit: 65536KB | 64bit IO Format: %I64d & %I64u |
Description
Input
Output
Sample Input
input | output |
---|---|
1 1 2 2 4 4 4 3 |
1 2 2 2 4 4 4 3 |
Source
题意:四个土豆在20*20的方格上,告诉起始位置,要求改变某些土豆的位置使得每个土豆只有一个土豆与他在同一行或同一列,要求改变的次数尽量小。
代码:
#include <iostream> #include <functional> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <string> #include <map> #include <stack> #include <vector> #include <set> #include <queue> #pragma comment (linker,"/STACK:102400000,102400000") #define pi acos(-1.0) #define eps 1e-6 #define lson rt<<1,l,mid #define rson rt<<1|1,mid+1,r #define FRE(i,a,b) for(i = a; i <= b; i++) #define FREE(i,a,b) for(i = a; i >= b; i--) #define FRL(i,a,b) for(i = a; i < b; i++) #define FRLL(i,a,b) for(i = a; i > b; i--) #define mem(t, v) memset ((t) , v, sizeof(t)) #define sf(n) scanf("%d", &n) #define sff(a,b) scanf("%d %d", &a, &b) #define sfff(a,b,c) scanf("%d %d %d", &a, &b, &c) #define pf printf #define DBG pf("Hi\n") typedef long long ll; using namespace std; #define INF 0x3f3f3f3f #define mod 1000000009 const int maxn = 1005; const int MAXN = 2005; const int MAXM = 200010; const int N = 1005; struct Node { int x,y; }node[5]; bool vis[25][25]; int a[5]; bool flag; bool isok() { memset(a,0,sizeof(a)); for (int i=0;i<4;i++) { for (int j=0;j<4;j++) { if (i==j) continue; if (node[i].x==node[j].x||node[i].y==node[j].y) a[i]++; } } for (int i=0;i<4;i++) if (a[i]!=1) return false; return true; } void dfs(int step,int sum) { if (flag) return ; if (step==sum) { if (isok()) { flag=true; for (int i=0;i<4;i++) printf("%d %d\n",node[i].x,node[i].y); } return ; } for (int k=0;k<4;k++) { int x=node[k].x; int y=node[k].y; for (int i=1;i<=20;i++) { for (int j=1;j<=20;j++) { if (vis[i][j]) continue; vis[x][y]=false; vis[i][j]=true; node[k].x=i;node[k].y=j; dfs(step+1,sum); vis[x][y]=true; vis[i][j]=false; node[k].x=x;node[k].y=y; } } } return ; } int main() { #ifndef ONLINE_JUDGE freopen("C:/Users/lyf/Desktop/IN.txt","r",stdin); #endif int i,j; while (~scanf("%d%d",&node[0].x,&node[0].y)) { memset(vis,false,sizeof(vis)); for (i=1;i<4;i++) { scanf("%d%d",&node[i].x,&node[i].y); vis[node[i].x][node[i].y]=true; } flag=false; for (i=0;i<3;i++) { if (flag) break; dfs(0,i); } } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
Chapaev and Potatoes (URAL 1809 暴力)
标签:chapaev and potatoes ural 1809 暴力
原文地址:http://blog.csdn.net/u014422052/article/details/47376241