关于文件的输入输出,只要在主函数中添加:

freopen("E:\\read9.txt","r",stdin);
freopen("E:\\write9.txt","w",stdout);

即可。

其余地方的输入输出不变,但是必须用scanf和printf进行输入输出。

实验一  迷宫问题(bfs)

#include"iostream"
#include"stdio.h"
#include"algorithm"
#include"queue"
#include"string.h"
#include"cmath"
#include"stack"
#include"fstream"
#define mx 105
#define inf 1000
using namespace std;
int n,m;
int sx,sy,ex,ey;
int  maze[mx][mx],vis[mx][mx];
int dir[8][2]= {{0,1},{0,-1},{1,0},{-1,0},{-1,-1},{-1,1},{1,-1},{1,1}};
bool judge(int x,int y)
{
    if(maze[x][y]==0&&x>=0&&x<n&&y>=0&&y<m)
    {
        return true;
    }
    return false;
}
void output(int step)
{        
    int i;
    stack<int>path;
    path.push(ex*m+ey);
    printf("%s%d\n","最少步骤是:",step);
    int x=ex,y=ey,dx,dy;
    while(vis[x][y]!=0)
    {
        for(i=0;i<8;i++)
        {
            dx=x+dir[i][0];
            dy=y+dir[i][1];
            if(dx>=0&&dx<n&&dy>=0&&dy<m)
            if(vis[dx][dy]==vis[x][y]-1)
            {
                path.push(dx*m+dy);
                break;
            }
        }
        x=dx;y=dy;
    }
    printf("%s","最短路径为:");
    while(!path.empty())
     {
         int u=path.top();
         path.pop();
         x=u/m;y=u%m;
         if(x!=ex||y!=ey)
        printf("%s%d%s%d%s%s","(",x,",",y,")","->");
         else printf("%s%d%s%d%s\n\n","(",x,",",y,")");
     }

}
void bfs(int step)
{
    queue<int>q;
    int i,x,y,dx,dy,u;
    x=sx;y=sy;
    u=x*m+y;
    q.push(u);
    while(!q.empty())
    {
        u=q.front();
        q.pop();
        x=u/m;y=u%m;
        if(x==ex&&y==ey)
        {
            output(step);
            return;
        }
        int flag=1;
        step=vis[x][y];
        for(i=0;i<8;i++)
        {
            dx=x+dir[i][0];
            dy=y+dir[i][1];
            if(judge(dx,dy))
            {
                   if(flag){step++;flag=0;}
                    maze[dx][dy]=1;
                    if(step<vis[dx][dy])
                    vis[dx][dy]=step;
                    u=dx*m+dy;
                    q.push(u);

            }
        }
    }
    printf("%s","没有满足条件的通路!\n");
}
int main()
{
    int i,j;
    freopen("C://read.txt","r",stdin);
    freopen("C://write.txt","w",stdout);
    while(scanf("%d%d",&n,&m),n||m)
    {
        for(i=0;i<n;i++)
        {
            for(j=0;j<m;j++)
                {scanf("%d",&maze[i][j]);vis[i][j]=inf;}
        }
        scanf("%d%d%d%d",&sx,&sy,&ex,&ey);
        maze[sx][sy]=1;
        vis[sx][sy]=0;
        bfs(0);
    }
    return 0;
}
View Code

相关文章:

  • 2021-08-04
  • 2021-06-13
  • 2021-11-11
  • 2021-09-09
  • 2021-08-12
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-01-24
  • 2022-12-23
  • 2021-05-19
  • 2022-12-23
  • 2022-01-20
相关资源
相似解决方案