问题描述
intmaze[3][3]={{0,0,0},{0,1,0},{0,0,0}}
求点maze[0][0]到点maze[1][2]两点之间的所有路径。谁知道的赋上源码,谢谢。。。。。。
解决方案
解决方案二:
路过帮顶=============11月6日,论坛升级公告,积分已经做了调整!此次调整增加了两个新的可用分获取渠道:1:帖子被推荐(加精)后,帖主可以获得88分的可用分奖励;2:帖子结帖后会返还帖主50%的悬赏分,无满意结帖不返还分数;3:接下来会不断增加新的可用分获取途径,比如参与活动赠送等,请大家多关注;
解决方案三:
楼主,你这问题没讲明白,如果单纯的要计算所有路径,可就多了去了,它可以在里面循环走,只要最终到达Maze[1][2]就可以了,但这个路径实在是太多了
解决方案四:
数据结构题?帮顶。。看高手解答。。
解决方案五:
不重复走、深度优先搜索DFS
解决方案六:
usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;namespaceWindowsApplication26{publicpartialclassForm1:Form{int[,]maze=newint[,]{{0,0,0},{0,1,0},{0,0,0}};StringAllPath=String.Empty;publicForm1(){InitializeComponent();StringPath="(0,0)";Go(maze,0,0,1,2,refPath);MessageBox.Show(AllPath);}voidGo(int[,]maze,intX,intY,intDestX,intDestY,refStringPath){if(X<0||X>maze.GetUpperBound(1)||Y<0||Y>maze.GetUpperBound(0)||maze[Y,X]>0)return;if(X==DestX&&Y==DestY){AllPath+=Path+"";return;}boolEnd=true;for(inti=0;i<maze.GetUpperBound(0);i++)for(intj=0;j<maze.GetUpperBound(1);j++)if(maze[i,j]!=2){End=false;break;}if(End)return;StringOldPath=Path;maze[Y,X]=2;Path+="("+Y.ToString()+","+(X+1).ToString()+")";Go(maze,Y,X+1,DestX,DestY,refPath);maze[Y,X]=0;Path=OldPath;maze[Y,X]=2;Path+="("+Y.ToString()+","+(X-1).ToString()+")";Go(maze,Y,X-1,DestX,DestY,refPath);maze[Y,X]=0;Path=OldPath;maze[Y,X]=2;Path+="("+(Y+1).ToString()+","+X.ToString()+")";Go(maze,Y+1,X,DestX,DestY,refPath);maze[Y,X]=0;Path=OldPath;maze[Y,X]=2;Path+="("+(Y-1).ToString()+","+X.ToString()+")";Go(maze,Y-1,X,DestX,DestY,refPath);maze[Y,X]=0;Path=OldPath;}}}
结果:(0,0)(0,1)(2,0)(1,2)(0,0)(1,0)(0,2)(2,1)(2,2)(1,2)
解决方案七:
这段没用,可以注释掉//boolEnd=true;//for(inti=0;i<maze.GetUpperBound(0);i++)//for(intj=0;j<maze.GetUpperBound(1);j++)//if(maze[i,j]!=2)//{//End=false;//break;//}//if(End)//return;
解决方案八:
结果输出2种,空格隔开
解决方案九:
不过并不是真正意义上的“所有”,原因ls的也说了