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的更多相关文章
随机推荐
- 分享最近写的一个存储过程 SOLVE_LOCK
CREATE OR REPLACE PROCEDURE SOLVE_LOCK AS V_SQL VARCHAR2(3000); --定义 v_sql 接受抓取锁的sql语句V_SQL02 VARCHA ...
- iOS如何准确获取通知
iOS获取通知需要注意以下三个地方iOS 设备收到一条推送(APNs),用户点击推送通知打开应用时,应用程序根据状态不同进行处理需在 AppDelegate 中的以下两个方法中添加代码以获取apn内容 ...
- Xaml中的资源(1 样式)
<Window x:Class="MyResoures.MainWindow" xmlns="http://schemas.microsoft.com/winfx/ ...
- 『重构--改善既有代码的设计』读书笔记----Introduce Foreign Method
当你无法获得一个类的源代码或者没有权限去修改这个类的时候,你对于这种为你服务的类,你可能会出现需要别的需求的时候,比如一个Date类,你需要能够让他本身直接返回出他的后一天的对象,但他没有,这个时候你 ...
- chrome调试状态下动态加载的js
在js文件中加入 //@ sourceURL=文件名.js
- 简单概述 .NET Framework 各版本区别
目前已发行的版本有1.0.1.1.2.0.3.0.3.5.4.0.4.5(及4.5.1.4.5.2).4.6(及4.6.1). 1.0版本:最初的.net framework版本,作为一个独立的工具包 ...
- Flask-SQLALchemy查询
from: http://blog.sina.com.cn/s/blog_633277f90100kpvm.html 似乎ORM最难设计的部分是查询.特别是面向对象的查询,今天学习SQLAlchemy ...
- 1.2机器学习基础下--python深度机器学习
1. 机器学习更多应用举例: 人脸识别 2. 机器学习就业需求: LinkedIn所有职业技能需求量第一:机器学习,数据挖掘和统计分析人才 http://blog.linked ...
- DOS命令行使用pscp实现远程文件和文件夹传输(转)
转自 http://snailwarrior.blog.51cto.com/680306/141201 pscp是putty安装包所带的远程文件传输工具,使用和Linux下scp命令相似,具体的使 ...
- 常用Firefox扩展
最近思维混乱,无心做事,故整理下东西.(PS:有些是firefox自带的.) 1.标签页管理器 2.1.41 用途:在新标签页打开书签.历史.地址.搜索. 主页:http://www.firefox. ...