走迷宫——其实我发错了

// migong.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<windows.h>
 #include<iostream>
 #include<stdlib.h>
 #include<time.h>
 #include<vector>
 using namespace std;  
 int ttime=8;
 
int incr[4][2]={ {0,1},{1,0},{-1,0},{0,-1} };
 
typedef vector<POINT> path;
 int DFS_maze(int maze[20][20],path& tpath,int m,int n)
 {
      if(m==18&&n==18)
      {
          POINT temp;
          temp.x=m;
          temp.y=n;
          tpath.push_back(temp);
          return 1;
      }
      
      if(maze[m][n]==0)
      {
          POINT temp;
          temp.x=m;
          temp.y=n;
          tpath.push_back(temp);
          maze[m][n]=-1;
          for(int dir=0;dir<4;dir++)
               if(DFS_maze(maze,tpath,m+incr[dir][0],n+incr[dir][1])==1) return 1;
          tpath.pop_back();
          //maze[m][n]=0;
      }
      return 0;
 }
 

long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam);
 BOOL InitWindowsClass(HINSTANCE hInstance);
 BOOL InitWindows(HINSTANCE hInstance,int nCmdShow);    
int Maze[20][20];
 int x=10;
 int y=10;
 int h=22;
 int w=22;
 int k=0;
 path Path;
 bool first=false;
 
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
 {
     time_t t;
     srand((unsigned) time(&t));
     int i;
     for(i=0; i<20; i++)
             for(int j=0; j<20; j++)
             {
                 Maze[i][j] = rand()%2;
                 if(Maze[i][j]) Maze[i][j]=rand()%2;
             }
     for(i=0; i<20; i++)
     {
         Maze[ 0][ i] = 1;
         Maze[19][ i] = 1;
         Maze[ i][ 0] = 1;
         Maze[ i][19] = 1;
     }
     Maze[18][18]=0;
     Maze[10][10]=0;
     MSG Message;
     if(!InitWindowsClass(hInstance))
         return FALSE;
     if(!InitWindows(hInstance,nCmdShow))
         return FALSE;
     while(GetMessage(&Message,0,0,0))
     {
         TranslateMessage(&Message);
         DispatchMessage(&Message);
     }
     return Message.wParam;
 }
 
long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam)
 {
     HDC hDC;
     PAINTSTRUCT ps;
     HPEN hPen;
     HBRUSH hBrush;
     switch(iMessage)
     {
         int i,j;
     case WM_LBUTTONDOWN:
         x=10;
         y=10;
         k=0;
         first=true;
         SetTimer(hWnd,1,1000,NULL);
         InvalidateRect(hWnd,NULL,FALSE);
         break;
     case WM_TIMER:
         k++;
         if(k==ttime&&first){
             first=false;
             MessageBox(hWnd,"time is over!","Failed",MB_OK);
         }
         break;
     case WM_RBUTTONDOWN:
         int temp[20][20];
         for(i=0;i<20;i++)
             for(j=0;j<20;j++)
                 temp[i][j]=Maze[i][j];
         if(DFS_maze(temp,Path,10,10)==0) MessageBox(hWnd,"No Path!","sorry",MB_OK);
         InvalidateRect(hWnd,NULL,FALSE);
         break;
 case WM_KEYDOWN:
     switch(wParam)
     {
     case VK_UP:
         if(Maze[x][y-1]==0){
             y--;
             InvalidateRect(hWnd,NULL,FALSE);    
        }
         break;
     case VK_DOWN:
         if(Maze[x][y+1]==0){
             y++;
             InvalidateRect(hWnd,NULL,FALSE);
         }
         break;
     case VK_LEFT:
         if(Maze[x-1][y]==0){
             x--;
             InvalidateRect(hWnd,NULL,FALSE); 
        }
         break;
     case VK_RIGHT:
         if(Maze[x+1][y]==0){
             x++;
             InvalidateRect(hWnd,NULL,FALSE);
         }
         break;
     case VK_SHIFT:
         if(Maze[x][y]==0) Maze[x][y]=1;
         else Maze[x][y]=0;
         InvalidateRect(hWnd,NULL,FALSE);
         break;
     case VK_F4:
         if(Maze[x+1][y]==0) Maze[x+1][y]=1;
         else Maze[x+1][y]=0;
         InvalidateRect(hWnd,NULL,FALSE);
         break;
     case VK_F3:
         if(Maze[x-1][y]==0) Maze[x-1][y]=1;
         else Maze[x-1][y]=0;
         InvalidateRect(hWnd,NULL,FALSE);
         break;
     case VK_F2:
         if(Maze[x][y+1]==0) Maze[x][y+1]=1;
         else Maze[x][y+1]=0;
         InvalidateRect(hWnd,NULL,FALSE);
         break;
     case VK_F1:
         if(Maze[x][y-1]==0) Maze[x][y-1]=1;
         else Maze[x][y-1]=0;
         InvalidateRect(hWnd,NULL,FALSE);
         break;
     }
     break;
     
    case WM_PAINT:
         hDC=BeginPaint(hWnd,&ps);
         SetMapMode(hDC,MM_ANISOTROPIC);
       for(i=0; i<20; i++)
         for(j=0; j<20; j++)
         {
             if(Maze[i][j]==0)
             {
                  hPen=(HPEN)GetStockObject(WHITE_PEN);
                  hBrush=(HBRUSH)GetStockObject(LTGRAY_BRUSH);
                  if(i==10&&j==10){
                     hPen=(HPEN)GetStockObject(WHITE_PEN);
                     hBrush=(HBRUSH)GetStockObject(DKGRAY_BRUSH);
                 }
 
            }
             else
             {
                 
                hPen=(HPEN)GetStockObject(WHITE_PEN);
                 hBrush=(HBRUSH)GetStockObject(BLACK_BRUSH);
             }
             SelectObject(hDC,hBrush);
             SelectObject(hDC,hPen);
             Rectangle(hDC,i*w,j*h,(i+1)*w,(j+1)*w);
         }
         hPen=CreatePen(PS_INSIDEFRAME,0,RGB(255,0,0));
         hBrush=(HBRUSH)GetStockObject(WHITE_BRUSH);
         SelectObject(hDC,hBrush);
         SelectObject(hDC,hPen);
         if(Path.size()>0)
         {
             POINT *s=new POINT[Path.size()];
             for(i=0;i<Path.size();i++){
                 s[i].x=Path[i].x*w+w/2;
                 s[i].y=Path[i].y*h+h/2;  
             }
             Polyline(hDC,s,Path.size());
             EndPaint(hWnd,&ps);
             Path.clear();
         }
 
    else{
         Ellipse(hDC,x*w,y*h,(x+1)*w,(y+1)*w);
         EndPaint(hWnd,&ps);    
        if(x==18&&y==18&&first){
             first=false;
             MessageBox(hWnd,"What a smart mouse!","WOW",MB_OK);         
         }
     }
         break;
     case WM_DESTROY:
         PostQuitMessage(0);
         KillTimer(hWnd,1);
         break;
     default:
         return DefWindowProc(hWnd,iMessage,wParam,lParam);
     }
     return 0;
 }
 


BOOL InitWindows(HINSTANCE hInstance,int nCmdShow)
 {
     HWND hWnd;
     hWnd=CreateWindow("cjw",
                       "老鼠绕粮仓",
                       WS_OVERLAPPEDWINDOW,
                       CW_USEDEFAULT,
                       0,
                       CW_USEDEFAULT,
                       0,
                       NULL,
                       NULL,
                       hInstance,
                       NULL);
     if(!hWnd)
         return false;
     ShowWindow(hWnd,nCmdShow);
     UpdateWindow(hWnd);
     return TRUE;
 }
 


BOOL InitWindowsClass(HINSTANCE hInstance)
 {
     WNDCLASS WndClass;
     WndClass.cbClsExtra=0;
     WndClass.cbWndExtra=0;
     WndClass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH));
     WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
     WndClass.hIcon=LoadIcon(NULL,"END");
     WndClass.hInstance=hInstance;
     WndClass.lpfnWndProc=WndProc;
     WndClass.lpszClassName="cjw";
     WndClass.lpszMenuName=NULL;
     WndClass.style=CS_HREDRAW|CS_VREDRAW;
     return RegisterClass(&WndClass);
 } 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本火锅店点餐系统采用Java语言和Vue技术,框架采用SSM,搭配Mysql数据库,运行在Idea里,采用小程序模式。本火锅店点餐系统提供管理员、用户两种角色的服务。总的功能包括菜品的查询、菜品的购买、餐桌预定和订单管理。本系统可以帮助管理员更新菜品信息和管理订单信息,帮助用户实现在线的点餐方式,并可以实现餐桌预定。本系统采用成熟技术开发可以完成点餐管理的相关工作。 本系统的功能围绕用户、管理员两种权限设计。根据不同权限的不同需求设计出更符合用户要求的功能。本系统中管理员主要负责审核管理用户,发布分享新的菜品,审核用户的订餐信息和餐桌预定信息等,用户可以对需要的菜品进行购买、预定餐桌等。用户可以管理个人资料、查询菜品、在线点餐和预定餐桌、管理订单等,用户的个人资料是由管理员添加用户资料时产生,用户的订单内容由用户在购买菜品时产生,用户预定信息由用户在预定餐桌操作时产生。 本系统的功能设计为管理员、用户两部分。管理员为菜品管理、菜品分类管理、用户管理、订单管理等,用户的功能为查询菜品,在线点餐、预定餐桌、管理个人信息等。 管理员负责用户信息的删除和管理,用户的姓名和手机号都可以由管理员在此功能里看到。管理员可以对菜品的信息进行管理、审核。本功能可以实现菜品的定时更新和审核管理。本功能包括查询餐桌,也可以发布新的餐桌信息。管理员可以查询已预定的餐桌,并进行审核。管理员可以管理公告和系统的轮播图,可以安排活动。管理员可以对个人的资料进行修改和管理,管理员还可以在本功能里修改密码。管理员可以查询用户的订单,并完成菜品的安排。 当用户登录进系统后可以修改自己的资料,可以使自己信息的保持正确性。还可以修改密码。用户可以浏览所有的菜品,可以查看详细的菜品内容,也可以进行菜品的点餐。在本功能里用户可以进行点餐。用户可以浏览没有预定出去的餐桌,选择合适的餐桌可以进行预定。用户可以管理购物车里的菜品。用户可以管理自己的订单,在订单管理界面里也可以进行查询操作。
好的,你可以使用深度优先搜索算法(DFS)或广度优先搜索算法(BFS)来解决这个问题。以下是一个基于DFS的JavaScript代码示例,可以帮助你理解如何实现自动走迷宫: ```javascript const maze = [ [0, 1, 0, 0, 0], [0, 1, 0, 1, 0], [0, 0, 0, 0, 0], [0, 1, 1, 1, 0], [0, 0, 0, 1, 0] ]; // 迷宫地图,0表示可行的空间,1表示障碍物 const start = [0, 0]; // 起点坐标 const end = [4, 4]; // 终点坐标 const dfs = (x, y, visited) => { if (x < 0 || y < 0 || x >= maze.length || y >= maze[0].length || visited[x][y] || maze[x][y] === 1) { return false; // 超出边界或者已经访问过或者是障碍物,返回false } visited[x][y] = true; // 标记为已访问 if (x === end[0] && y === end[1]) { return true; // 到达终点,返回true } const directions = [[-1, 0], [0, 1], [1, 0], [0, -1]]; // 上右下左四个方向 for (const [dx, dy] of directions) { const nx = x + dx; const ny = y + dy; if (dfs(nx, ny, visited)) { return true; // 如果能够到达终点,返回true } } return false; // 如果四个方向都走不通,返回false }; const visited = Array.from({length: maze.length}, () => Array(maze[0].length).fill(false)); // 初始化visited数组 console.log(dfs(start[0], start[1], visited)); // 输出是否可以到达终点 ``` 上述代码中,我们定义了一个`dfs`函数,用于递归地搜索所有可能的路径。在每次递归中,我们检查当前位置是否越界、已访问或是障碍物,如果是,则返回false;否则,我们标记当前位置为已访问,然后尝试向四个方向递归搜索,如果其中任意一个方向能够到达终点,则返回true;如果四个方向都走不通,返回false。最后,我们初始化一个`visited`数组,然后调用`dfs`函数从起点开始搜索,输出是否可以到达终点。 你也可以尝试使用BFS算法来解决这个问题,实现方法类似,只是搜索顺序不同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值