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 ...
随机推荐
- zmq利用protobuf通信
protobuf序列化之后为二进制数据,数据中可能包含 ‘\0’,直接转换为char *类型会导致发送数据不完整.解决方法: void buildProtobufMsg(const string&am ...
- Hadoop–Task 相关
在MapReduce计算框架中,一个应用程序被划分为Map和Reduce两个计算阶段.他们分别由一个或多个Map Task 和Reduce Task组成. Map Task: 处理输入数据集合中的一片 ...
- Redis探索之路(四):Redis的五种数据类型Set和ZSet
一:Set无需集合 Set是个集合,string类型的无需集合,通过hash table实现,添加删除查找复杂度都是0(1).对集合我们可以取并集,交集和差集.通过这些操作我们可以实现sns中的好友推 ...
- 使用 Google Chrome 数据抓包方式免费下载收费音乐
对于每个有音乐细胞的 boys & girls 来说,听音乐的时候是不是会经常遇到如下图的问题. 自从音乐进入正版之后,很多歌曲只有付费用户才可以下载.虽然可以在线听,可是以我的倔脾气,就是喜 ...
- 阿里云成为Hyperledger超级账本全球会员,发力区块链生态建设
摘要: 阿里云将会与Hyperledger社区共同推进全球区块链技术和商业生态在多行业领域的建设. 2018年12月12日在瑞士巴塞尔的2018Hyperledger全球峰会上,阿里云正式加入Hype ...
- bzoj1040题解
[题意分析] 给你一个带权基环树森林,求它的点集的无邻点子集的最大权值和. [解题思路] 对于树的部分,做一遍拓扑排序+递推即可(f[i][j]表示第i个节点选取状态为j(0/1)可以得到的最大权值和 ...
- C#面向对象通信
面向对象通信编程: 看起来像是调用本地的函数,就得到了结果: 实际上参数是传递到了远程机器上了,而函数也是在远程机器上运行的.
- Day 14: 内置函数:
Python提供了,许多内置的函数我们按 函数的作用来分类: 一.作用域相关的内置函数(2个) (1).globals() 更改全局变量 (2).locals()更改局并命名空间的变量(上一级) 五. ...
- Docker搭建Portainer可视化界面
为了解决上回说到的问题,在网上找了找 找到了一个 非常有好的可视化界面管理工具. Portainer 是什么东西 (开源轻量级) Portainer是Docker的图形化管理工具,提供状态显示面板.应 ...
- Spring Boot 整合 Druid && 配置数据源监控
1. 导入 Druid 包 <dependency> <groupId>com.alibaba</groupId> <artifactId>druid& ...