#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版本 之 并查集生成迷宫的更多相关文章

  1. [原]windows sdk版本不对

    系统硬盘换了,重新安装一堆软件,SVN. 之前的SVN地址直接能找到 在编译vs项目的时候出现问题: windows sdk 10.0.14393.0 版本找不到 发现自己按照vs时候更新不了最新sd ...

  2. VS2017新建或拷贝项目编译时出现:找不到 Windows SDK 版本8.1.请安装所需的版本的 Windows SDK

    VS2017新建或拷贝项目编译时出现:找不到 Windows SDK 版本8.1.请安装所需的版本的 Windows SDK 或者在项目属性页的问题解决方案 解决方法: 右击项目解决方案, 选择:重定 ...

  3. 数据结构09—— 并查集(Union-Find)

    一.关于并查集 并查集(Union-Find)是一种树型的数据结构,常用于处理一些不相交集合(Disjoint Sets)的合并及查询问题.并查集(Union-Find)从名字可以看出,主要它涉及两种 ...

  4. P3402 可持久化并查集

    P3402 通过主席树维护不同版本的并查集,注意要采用按秩合并的方式,路径压缩可能会爆. 1 #include <bits/stdc++.h> 2 using namespace std; ...

  5. 算法初级面试题05——哈希函数/表、生成多个哈希函数、哈希扩容、利用哈希分流找出大文件的重复内容、设计RandomPool结构、布隆过滤器、一致性哈希、并查集、岛问题

    今天主要讨论:哈希函数.哈希表.布隆过滤器.一致性哈希.并查集的介绍和应用. 题目一 认识哈希函数和哈希表 1.输入无限大 2.输出有限的S集合 3.输入什么就输出什么 4.会发生哈希碰撞 5.会均匀 ...

  6. BZOJ 4516: [Sdoi2016]生成魔咒——后缀数组、并查集

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4516 题意 一开始串为空,每次往串后面加一个字符,求本质不同的子串的个数,可以离线.即长度为 ...

  7. BZOJ 3674 可持久化并查集加强版(路径压缩版本)

    /* bzoj 3674: 可持久化并查集加强版 http://www.lydsy.com/JudgeOnline/problem.php?id=3674 用可持久化线段树维护可持久化数组从而实现可持 ...

  8. BZOJ 3674 可持久化并查集加强版(按秩合并版本)

    /* bzoj 3674: 可持久化并查集加强版 http://www.lydsy.com/JudgeOnline/problem.php?id=3674 用可持久化线段树维护可持久化数组从而实现可持 ...

  9. ONS C++ Windows SDK 调试方法及注意事项

    此文将展示ONS C++ Windows SDK 整个调试过程,笔者直接使用sdk包中的example消息发送示例代码,开发环境为win7, 64位,Visual Studio Professiona ...

随机推荐

  1. window操作命令

    netstat -ano 查看所有端口 netstat -ano|findstr "8005"  查看指定端口

  2. 解决在移动端上 click事件延迟300 毫秒的问题 fastclick.js

    1 为什么会发生延迟300毫秒的问题 移动设备上的浏览器默认会在用户点击屏幕大约延迟300毫秒后才会触发点击事件,这是为了检查用户是否在做双击.为了能够立即响应用户的点击事件,才有了FastClick ...

  3. python-面向对象-01课堂笔记

    面向对象 ''''1.面向过程编程   核心是"过程"二字,过程指的是解决问题的步骤,即先干什么再干什么   基于该思想编写程序就好比在编写一条流水线,是一种机械式的思维方式​   ...

  4. python 模拟按键模拟键盘按键按下放开

    python模拟按键 pip install pypiwin32安装库 import win32conimport win32apiimport time 导入 打个比方模拟A win32api.ke ...

  5. BOM——特效

    特效 偏移量 offsetParent用于获取定位的父级元素 offsetParent和parentNode的区别  var box = document.getElementById('box'); ...

  6. JavaWeb学习篇之----Servlet

    今天来继续学习JavaWeb的相关知识,之前都是都介绍一些基本知识,从今天开始我们来说一下如何在服务器编写程序,这里就需要来介绍一下Servlet的相关知识了.Servlet就是一个能够运行在服务器端 ...

  7. HDU3605: Escape-二进制优化建图-最大流

    目录 目录 思路: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 目录 题意:传送门  原题目描述在最下面.  \(n(n\leq 100000)\)个人\(m(m\leq 10) ...

  8. LeetCode 1103. Distribute Candies to People (分糖果 II)

    题目标签:Math 题目让我们分发糖果,分的糖果从1 开始依次增加,直到分完. for loop可以计数糖果的数量,直到糖果发完.但是还是要遍历array 给people 发糖,这里要用到 index ...

  9. LeetCode 744. Find Smallest Letter Greater Than Target (寻找比目标字母大的最小字母)

    题目标签:Binary Search 题目给了我们一组字母,让我们找出比 target 大的最小的那个字母. 利用 binary search,如果mid 比 target 小,或者等于,那么移到右半 ...

  10. Adobe Fireworks CS6 win64的安装

    网页三大剑客之一    FW的安装 本人也是找了半天才找到的. (没有视频)这里先感谢原帖给我的链接https://blog.csdn.net/qq_38053395/article/details/ ...