C++ 实战测试——电子老鼠闯迷宫(BFS)

来源:互联网 发布:c语言数据类型长度代码 编辑:程序博客网 时间:2024/05/16 01:22

题目描述、分析
详见http://blog.csdn.net/ssl_qyh0ice/article/details/53769339

此处为C++做法

#include<iostream>using namespace std;int s1,s2,e1,e2,n;int a[100][100];int father[100];int state[100][3];int dx[4];int dy[4];void init(){    ios::sync_with_stdio(false);    int i,j;    cin>>n;    cin>>s1>>s2>>e1>>e2;    for (i=1;i<=n;i++)     for (j=1;j<=n;j++)      cin>>a[i][j];    dx[1]=1;dx[2]=-1;dx[3]=0;dx[4]=0;    dy[1]=0;dy[2]=0;dy[3]=1;dy[4]=-1;}void print(int k,int s){    if (k==0) return;    print(father[k],s+1);    if (s==0) cout<<'('<<state[k][1]<<','<<state[k][2]<<")"<<endl;     else     cout<<'('<<state[k][1]<<','<<state[k][2]<<")-->";}void bfs(){    int tail,head,i;    tail=1;head=0;state[1][1]=s1;state[1][2]=s2;father[1]=0;    do    {     head++;     for(i=1;i<=4;i++)       if (a[state[head][1]+dx[i]][state[head][2]+dy[i]]==0)      {        tail++;        state[tail][1]=state[head][1]+dx[i];        state[tail][2]=state[head][2]+dy[i];        state[tail][3]=state[head][3]+1;        father[tail]=head;        a[state[tail][1]][state[tail][2]]=1;        if (state[tail][1]==e1&&state[tail][2]==e2)        {            print(tail,0);            cout<<state[tail][3]+1<<endl;            head=tail+1;        }      }    }while (head<tail);}int main(){    init();    bfs();    return(0);}

第一次用C++好兴奋!!!!
欢迎各位点赞!!!!

1 0
原创粉丝点击