poj2569
http://poj.org/problem?id=2965
错了两次,第一次时间超限,第二次是数组定义的太大(怀疑错的地方都一样)
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
#include<queue>
using namespace std; #define maxn 70000 ////////////////不要定义太大,初始化不是不浪费时间的 struct node
{
int x, y, k, pre;
}v[maxn]; int p[10][10]; int changeNum(int a[][10]);//把二维数组转化成一个数字
void change();//构造异或数组
void changeXY(int x, int y, int a[][10]);//改变xy所在坐标的行和列
void FunOut(int pre);//输出前面的所有坐标
void BFS(); int main()
{
int i, j, a[10][10], m;
char ch; memset(v, 0, sizeof(v));
BFS(); for(i=1; i<=4; i++)
for(j=1; j<=4; j++)
{
cin >> ch; if(ch == '-')
a[i][j] = 0;
else
a[i][j] = 1;
} m = changeNum(a); printf("%d\n", v[m].k-1);
FunOut(m); return 0;
}
int changeNum(int a[][10])//把二维数组转化成一个数字
{
int i, j, m=0; for(i=1; i<=4; i++)
for(j=1; j<=4; j++)
{
m = m*2 + a[i][j];
} return m;
} void FunOut(int pre)//输出前面的所有坐标
{
if(pre== 0)
return ; FunOut(v[pre].pre); printf("%d %d\n", v[pre].x, v[pre].y);
}
void BFS()
{
queue<int> Q;
v[0].k = 1;
Q.push(0); change(); while(Q.size())
{
int q = Q.front();Q.pop(); for(int i=1; i<=4; i++)
for(int j=1; j<=4; j++)
{
int m = q ^ p[i][j]; if(v[m].k == 0)
{
v[m].k = v[q].k + 1;
v[m].pre = q;
v[m].x = i;
v[m].y = j; Q.push(m);
}
}
}
}
void changeXY(int x, int y, int a[][10])//改变xy所在坐标的行和列
{
int i; for(i=1; i<=4; i++)
{
a[x][i] = 1 - a[x][i];
a[i][y] = 1 - a[i][y];
}
a[x][y] = 1 - a[x][y];
} void change()//构造异或数组
{
int i, j, b[10][10] = {0}; for(i=1; i<=4; i++)
for(j=1; j<=4; j++)
{
changeXY(i, j, b);
p[i][j] = changeNum(b);
changeXY(i, j, b);
}
}
poj2569的更多相关文章
随机推荐
- Maven搭建Spring+Struts2+Hibernate项目详解
http://www.bubuko.com/infodetail-648898.html
- iOS UICollectionview的详细介绍
转载自:http://jinqianchina.github.io/2015/08/16/UICollectionview%E7%9A%84%E4%BD%BF%E7%94%A8%E8%AF%A6%E8 ...
- Xcode 7真机测试详解
1.准备 注意:一定要让你的真机设备的系统版本和app的系统版本想对应,如果不对应就会出现一个很常见的问题:could not find developer disk image 首先,准备好下面的设 ...
- NSString NSCFString区别
NSString 是 NSCFString的父类 在于NSString是个class cluster,一个类簇.什么是一个类簇?简单的来说,NSString是个“工厂类”,然后它在外层提供了很多方法接 ...
- office2010怎么激活
软件都是不断更新换代的,像我们使用最多的Microsoft Office软件,从最初的98,2000,2003,2007,到现在的2010.但是在最初安装Office软件时,都是未激活的.下面介绍的就 ...
- hdoj 1087 (DP)
代码: #include<iostream> #include<cmath> using namespace std; int a[1005], dp[1005]; ...
- 【ZOJ2112】【整体二分+树状数组】带修改区间第k大
The Company Dynamic Rankings has developed a new kind of computer that is no longer satisfied with t ...
- 拓扑排序-DFS
拓扑排序的DFS算法 输入:一个有向图 输出:顶点的拓扑序列 具体流程: (1) 调用DFS算法计算每一个顶点v的遍历完成时间f[v] (2) 当一个顶点完成遍历时,将该顶点放到一个链表的最前面 (3 ...
- Ubuntu 字体安装
命令安装: 以微软雅黑字体为例(其他的宋体.黑体等点阵字体都一样的),我们的雅黑字体文件是:Yahei.ttf(放在自己的主目录下)(在widows目录的Fonts目录下找需要的字体)由于我是双系 ...
- C++例题2:汉诺塔问题
#include<iostream>#include<stdlib.h>using namespace std;void Hanoi(int n,char A,char B,c ...