迷宫求解的算法能否改进??
2006-11-29 09:38
190 查看
URL:http://blog.sina.com.cn/u/4acaa0910100064d
#include<vector>
#include<iostream>
using namespace std;
int main(int argc, char* argv[])
{
vector <int> a(10,0) ;
vector<vector<int> > b(10,a);
for(int i=0;i<10;++i)
{ for(int j=0;j<10;++j)
cout<<b[i][j]<<" ";
cout<<endl; }
for(int i=0;i<10;++i)
for(int j=0;j<10;++j)
{ b[0][j]=1;b[j][0]=1;
b[9][j]=1;b[j][9]=1; }
b[5][3]=1;b[6][3]=1;b[2][4]=1;b[3][4]=1;b[4][4]=1;
b[4][5]=1;b[2][6]=1;b[6][6]=1;b[2][7]=1;b[3][7]=1;
b[4][7]=1;b[6][7]=1;b[7][7]=1;b[1][8]=1;b[3][1]=1;
b[7][1]=1;b[3][2]=1;b[7][2]=1;b[1][1]=3;b[8][8]=3;
cout<<endl;
for(int i=0;i<10;++i)
{ for(int j=0;j<10;++j)
cout<<b[i][j]<<" ";
cout<<endl; }
vector<int> vi;
vector<int> vj;
int i=1,j=1;
for(;i<=8,j<=8;)
{ if(b[i][j+1]==3) break;
if(b[i][j+1]==0) { b[i][j+1]=2; vi.push_back(i);vj.push_back(j+1);
i=vi.back() ;j=vj.back() ;
continue; }
else if (b[i+1][j]==3) break;
else if (b[i+1][j]==0) { b[i+1][j]=2; vi.push_back(i+1);vj.push_back(j);
i=vi.back() ;j=vj.back() ;
continue; }
else if (b[i-1][j]==3) break;
else if (b[i-1][j]==0) { b[i-1][j]=2; vi.push_back(i-1);vj.push_back(j);
i=vi.back() ;j=vj.back() ;
continue; }
else { vi.pop_back() ;vj.pop_back() ;
i=vi.back() ;j=vj.back() ; }
}
cout<<endl;
// for(int i=0;i<vi.size() ;++i)
// for(int j=0;j<vj.size() ;++j)
// b[vi[i]][vj[j]]=6;
for(int i=0;i<10;++i)
{ for(int j=0;j<10;++j)
cout<<b[i][j]<<" ";
cout<<endl; }
}
以上程序有点小问题的!!
不知道有没有别的更好的算法??
#include<vector>
#include<iostream>
using namespace std;
int main(int argc, char* argv[])
{
vector <int> a(10,0) ;
vector<vector<int> > b(10,a);
for(int i=0;i<10;++i)
{ for(int j=0;j<10;++j)
cout<<b[i][j]<<" ";
cout<<endl; }
for(int i=0;i<10;++i)
for(int j=0;j<10;++j)
{ b[0][j]=1;b[j][0]=1;
b[9][j]=1;b[j][9]=1; }
b[5][3]=1;b[6][3]=1;b[2][4]=1;b[3][4]=1;b[4][4]=1;
b[4][5]=1;b[2][6]=1;b[6][6]=1;b[2][7]=1;b[3][7]=1;
b[4][7]=1;b[6][7]=1;b[7][7]=1;b[1][8]=1;b[3][1]=1;
b[7][1]=1;b[3][2]=1;b[7][2]=1;b[1][1]=3;b[8][8]=3;
cout<<endl;
for(int i=0;i<10;++i)
{ for(int j=0;j<10;++j)
cout<<b[i][j]<<" ";
cout<<endl; }
vector<int> vi;
vector<int> vj;
int i=1,j=1;
for(;i<=8,j<=8;)
{ if(b[i][j+1]==3) break;
if(b[i][j+1]==0) { b[i][j+1]=2; vi.push_back(i);vj.push_back(j+1);
i=vi.back() ;j=vj.back() ;
continue; }
else if (b[i+1][j]==3) break;
else if (b[i+1][j]==0) { b[i+1][j]=2; vi.push_back(i+1);vj.push_back(j);
i=vi.back() ;j=vj.back() ;
continue; }
else if (b[i-1][j]==3) break;
else if (b[i-1][j]==0) { b[i-1][j]=2; vi.push_back(i-1);vj.push_back(j);
i=vi.back() ;j=vj.back() ;
continue; }
else { vi.pop_back() ;vj.pop_back() ;
i=vi.back() ;j=vj.back() ; }
}
cout<<endl;
// for(int i=0;i<vi.size() ;++i)
// for(int j=0;j<vj.size() ;++j)
// b[vi[i]][vj[j]]=6;
for(int i=0;i<10;++i)
{ for(int j=0;j<10;++j)
cout<<b[i][j]<<" ";
cout<<endl; }
}
以上程序有点小问题的!!
不知道有没有别的更好的算法??
相关文章推荐
- 迷宫求解算法
- 栈:深度优先搜索与回溯算法求解迷宫
- 快速排序的两种改进方法算法及topK问题求解
- 求解迷宫算法 迭代法
- 迷宫求解算法(Java)
- 算法之使用递归求解迷宫问题
- 迷宫求解算法(栈DFS以及队列BFS)
- 栈的应用:利用顺序栈求解迷宫问题(改编自严蔚敏算法)
- 用并查集(find-union)实现迷宫算法以及最短路径求解
- 回溯算法基础---皇后问题,骑士游历,迷宫求解
- 求解迷宫的算法
- 回溯算法经典应用:迷宫求解
- 不相交类集算法生成迷宫并求解路径
- 【数据结构】算法3.3 迷宫求解
- 算法:迷宫求解(栈的应用)-数据结构(8)
- 迷宫求解(队列算法)
- 求解迷宫算法 递归法
- A*算法求解迷宫;算法的确犀利,太快了,即便我写的不够快- -;
- 数据结构和算法设计(迷宫求解问题的栈和队列的实现)
- C/C++求解迷宫算法