当前位置:编程学习 > C/C++ >>

c++解决迷宫寻路问题

[cpp]  
// time.cpp : Defines the entry point for the console application.  
//  
  
#include "stdafx.h"  
#include <iostream>  
#include <string>  
#include <Windows.h>  
#include <list>  
using namespace std;  
int box[8][10]={{1,1,1,1,1,1,1,1,1,1},  
{1,0,1,1,1,0,1,1,1,1},  
{1,1,0,1,0,1,1,1,1,1},  
{1,0,1,0,0,0,0,0,1,1},  
{1,0,1,1,1,0,1,1,1,1},  
{1,1,0,0,1,1,0,0,0,1},  
{1,0,1,1,0,0,1,1,0,1},  
{1,1,1,1,1,1,1,1,1,1}};  
struct sPoint  
{  
    sPoint(int x1,int y1){x=x1;y=y1;}  
    int x;  
    int y;  
};  
void calc(int *box,int width,int height,sPoint start,sPoint end)  
{  
    list<sPoint> s;  
    box[start.x*width+start.y]=2;  
    int x=start.x,y=start.y;  
    s.push_back(sPoint(x,y));  
    while(1)  
    {  
        if(x==end.x && y==end.y)  
        {  
            while (!s.empty())  
            {  
                cout<<s.front().x<<"  "<<s.front().y<<endl;  
                s.pop_front();  
            }  
            break;  
        }  
        else  
        {  
            //cout<<x<<"  "<<y<<endl;  
        }  
        bool bGo=false;  
        for(int i=0;i<8;i++)  
        {  
            switch(i)  
            {  
            case 0:  
                {  
                    if(y>0 && box[(y-1)*width+x]==0)  
                    {  
                        y=y-1;  
                        box[y*width+x]=2;  
                        s.push_back(sPoint(x,y));  
                        bGo=true;  
                    }  
                    break;  
                }  
            case 1:  
                {  
                    if(x<width-1 && y>0 && box[(y-1)*width+x+1]==0)  
                    {  
                        x=x+1;  
                        y=y-1;  
                        box[y*width+x]=2;  
                        s.push_back(sPoint(x,y));  
                        bGo=true;  
                    }  
                    break;  
                }  
            case 2:  
                {  
                    if(x<width-1 && box[y*width+x+1]==0)  
                    {  
                        x=x+1;  
                        box[y*width+x]=2;  
                        s.push_back(sPoint(x,y));  
                        bGo=true;  
                    }  
                    break;  
                }  
            case 3:  
                {  
                    if(x<width-1 && y<height-1 && box[(y+1)*width+x+1]==0)  
                    {  
                        x=x+1;  
                        y=y+1;  
                        box[y*width+x]=2;  
                        s.push_back(sPoint(x,y));  
                        bGo=true;  
                    }  
                    break;  
                }  
            case 4:  
                {  
                    if(y<height-1 && box[(y+1)*width+x]==0)  
                    {  
                        y=y+1;  
                        box[y*width+x]=2;  
                      &
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,