windows sdk版本 之 并查集生成迷宫
#include <cstdlib>
#include <ctime>
#include<algorithm>
using namespace std; extern "C"
{
#include <windows.h>
#include <tchar.h>
} #define SIZE 18 LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
int FindParent(int*,int);
int SepToPoint(int,POINT*,POINT*); //0代表左右关系 1代表上下关系
void BaseToRowCol(int,int*,int*);
void RowColToBase(int,int,int*); HWND hwnd;
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
TCHAR szAppName[]=TEXT("first win"); MSG msg;
WNDCLASS wndclass; wndclass.style=CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc=WndProc;
wndclass.cbClsExtra=;
wndclass.cbWndExtra=;
wndclass.hInstance=hInstance;
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName=NULL;
wndclass.lpszClassName=szAppName; if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("error"),szAppName,MB_ICONERROR);
return ;
} hwnd=CreateWindow(szAppName,
TEXT("hello"),
WS_OVERLAPPEDWINDOW^WS_MAXIMIZEBOX^WS_THICKFRAME,
, //CW_USEDEFAULT
,
, //CW_USEDEFAULT,
, //CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL); ShowWindow(hwnd,nShowCmd);
UpdateWindow(hwnd); while(GetMessage(&msg,NULL,,))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
} return msg.wParam;
} HDC hdc;
PAINTSTRUCT ps; int collect[SIZE*SIZE];
int arrSep[SIZE*(SIZE-)*];
int sepIdx=; LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_CREATE:
srand(time(NULL)); //初始化集合每个顶点
for(int i=;i<SIZE*SIZE;i++)
{
collect[i]=i;
}
//初始化边的数组
for(int i=;i<SIZE*(SIZE-)*;i++)
{
arrSep[i]=i;
}
//乱序边数组
random_shuffle(arrSep,arrSep+SIZE*(SIZE-)*-); //生成迷宫
while(FindParent(collect,)!=FindParent(collect,SIZE*SIZE-))
{
int sep=arrSep[sepIdx++];
POINT first,second;
SepToPoint(sep,&first,&second); int firstBase,secondBase;
RowColToBase(first.x,first.y,&firstBase);
RowColToBase(second.x,second.y,&secondBase); int pFirst=FindParent(collect,firstBase);
int pSecond=FindParent(collect,secondBase);
//合并集合
collect[pFirst]=pSecond; }
break;
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps); { //画线
int top=,left=; //左上边距
int sep=; //间隔
//画上边
MoveToEx(hdc,left,top,NULL);
LineTo(hdc,left+SIZE*sep,top);
//画下边
MoveToEx(hdc,left,top+SIZE*sep,NULL);
LineTo(hdc,left+SIZE*sep,top+SIZE*sep);
//画左边
MoveToEx(hdc,left,top,NULL);
LineTo(hdc,left,top+SIZE*sep);
//画右边
MoveToEx(hdc,left+SIZE*sep,top,NULL);
LineTo(hdc,left+SIZE*sep,top+SIZE*sep); //画剩余的障碍边
POINT first,second;
int dir;
for(int i=sepIdx;i<SIZE*(SIZE-)*;i++)
{
dir=SepToPoint(arrSep[i],&first,&second);
if(dir==) //first的右边
{
MoveToEx(hdc,left+(first.y+)*sep,top+first.x*sep,NULL);
LineTo(hdc,left+(first.y+)*sep,top+(first.x+)*sep);
}
else //first的下边
{
MoveToEx(hdc,left+first.y*sep,top+(first.x+)*sep,NULL);
LineTo(hdc,left+(first.y+)*sep,top+(first.x+)*sep);
}
} } EndPaint(hwnd,&ps);
break;
case WM_DESTROY:
//MessageBox(NULL,TEXT("destroy"),TEXT("caption"),MB_YESNO);
PostQuitMessage();
return ; } return DefWindowProc(hwnd,message,wParam,lParam);
} int FindParent(int* collect,int v)
{
int p=collect[v];
while(p!=v)
{
v=p;
p=collect[v];
}
return p;
} int SepToPoint(int sep,POINT* first,POINT* second) //边的坐标转换为相邻两块坐标
{
int g=sep/(SIZE*-);
int c=sep%(SIZE*-);
int dir;
if(c<SIZE-) //点是左右关系
{
first->x=g;
first->y=c; second->x=first->x;
second->y=first->y+; dir=;
}
else //点是上下关系
{
first->x=g;
first->y=c-(SIZE-); second->x=first->x+;
second->y=first->y; dir=;
}
return dir;
} void BaseToRowCol(int base,int* row,int* col)
{
*row=base/SIZE;
*col=base%SIZE;
} void RowColToBase(int row,int col,int* base)
{
*base=row*SIZE+col;
}
windows sdk版本 之 并查集生成迷宫的更多相关文章
- [原]windows sdk版本不对
系统硬盘换了,重新安装一堆软件,SVN. 之前的SVN地址直接能找到 在编译vs项目的时候出现问题: windows sdk 10.0.14393.0 版本找不到 发现自己按照vs时候更新不了最新sd ...
- VS2017新建或拷贝项目编译时出现:找不到 Windows SDK 版本8.1.请安装所需的版本的 Windows SDK
VS2017新建或拷贝项目编译时出现:找不到 Windows SDK 版本8.1.请安装所需的版本的 Windows SDK 或者在项目属性页的问题解决方案 解决方法: 右击项目解决方案, 选择:重定 ...
- 数据结构09—— 并查集(Union-Find)
一.关于并查集 并查集(Union-Find)是一种树型的数据结构,常用于处理一些不相交集合(Disjoint Sets)的合并及查询问题.并查集(Union-Find)从名字可以看出,主要它涉及两种 ...
- P3402 可持久化并查集
P3402 通过主席树维护不同版本的并查集,注意要采用按秩合并的方式,路径压缩可能会爆. 1 #include <bits/stdc++.h> 2 using namespace std; ...
- 算法初级面试题05——哈希函数/表、生成多个哈希函数、哈希扩容、利用哈希分流找出大文件的重复内容、设计RandomPool结构、布隆过滤器、一致性哈希、并查集、岛问题
今天主要讨论:哈希函数.哈希表.布隆过滤器.一致性哈希.并查集的介绍和应用. 题目一 认识哈希函数和哈希表 1.输入无限大 2.输出有限的S集合 3.输入什么就输出什么 4.会发生哈希碰撞 5.会均匀 ...
- BZOJ 4516: [Sdoi2016]生成魔咒——后缀数组、并查集
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4516 题意 一开始串为空,每次往串后面加一个字符,求本质不同的子串的个数,可以离线.即长度为 ...
- BZOJ 3674 可持久化并查集加强版(路径压缩版本)
/* bzoj 3674: 可持久化并查集加强版 http://www.lydsy.com/JudgeOnline/problem.php?id=3674 用可持久化线段树维护可持久化数组从而实现可持 ...
- BZOJ 3674 可持久化并查集加强版(按秩合并版本)
/* bzoj 3674: 可持久化并查集加强版 http://www.lydsy.com/JudgeOnline/problem.php?id=3674 用可持久化线段树维护可持久化数组从而实现可持 ...
- ONS C++ Windows SDK 调试方法及注意事项
此文将展示ONS C++ Windows SDK 整个调试过程,笔者直接使用sdk包中的example消息发送示例代码,开发环境为win7, 64位,Visual Studio Professiona ...
随机推荐
- springBoot项目mybatis中加入缓存
1:maven: <!-- https://mvnrepository.com/artifact/net.sf.ehcache/ehcache-core --> <dependenc ...
- thinkphp 数据库缓存
默认的数据库驱动位于Think\Db\Driver命名空间下面,驱动类必须继承Think\Db类,每个数据库驱动必须要实现的接口方法包括(具体参数可以参考现有的数据库驱动类库): 驱动方法 方法说明 ...
- JavaScript中深拷贝实现
JavaScript 中深拷贝实现 拷贝时候涉及到: 1.循环结构 2.判断数组 Array 还是对象 Object 函数实现 /** * 获取满足条件的数组中的第一个元素 * @param ...
- 暴力”注入Explorer
暴力"注入Explorer pjf(jfpan20000@sina.com) 向一个运行中的进程注入自己的代码,最自然莫过于使用Cr ...
- 简单实用的makefile
简单的makefile 为了说明问题,就新建一组文件如下: 文件布局及运行结果: make clean 按目录归置 文件看起来是是清楚了,但是makefile写得揪心. 实用版 (1)Makefile ...
- boost库之pool编译错误
1,编译错误截图 2,解决方法 这是由于没有链接对应的库导致的错误,在编译命令中加上 -lboost_system选项即可.
- Hadoop安装成功之后,访问不了web界面的50070端口怎么解决?
Hadoop安装成功之后,访问不了web界面的50070端口 先查看端口是否启用 [hadoop@s128 sbin]$ netstat -ano |grep 50070 然后查看防火墙的状态,是否关 ...
- 树形结构_红黑树:平衡2X 哈夫曼树:最优2X
红黑树:平衡2X 哈夫曼树:最优2X 红黑树 :TreeSet.TreeMap 哈夫曼树 1. 将w1.w2.…,wn看成是有n 棵树的森林(每棵树仅有一个结点): 2. 在森林中选出根结点的权值最小 ...
- 使用neo4j图数据库的import工具导入数据 -方法和注意事项
背景 最近我在尝试存储知识图谱的过程中,接触到了Neo4j图数据库,这里我摘取了一段Neo4j的简介: Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中.它是一个嵌 ...
- Unity中DoTween的使用
在Unity手游开发中,经常用到插值运算,我们可以使用Mathf.Lerp自行去实现效果,但是使用插件提高了我们的开发效率,这里归结一下DoTween的基本使用方式以及效果说明: 直接代码: usin ...