[急]求两个图算法的伪代码,各位大虾帮个忙!

Aaron_Jerry 2009-06-18 11:03:08
算法1:
就是在一个有向图中,假设每个节点都会满足一些公式(这里的公式就是表示性质),我要找,在这个有向图中,从指定的那个入口节点出发,是否存在一条路径(路径要求找到出度为0的节点结束),在这个路径中的每个节点都满足公式A。

算法2:
在一个有向图中,从入口节点开始找,是否存在一条路径,在这个路径上某个节点满足公式B,且这个节点之前的所有节点都满足公式A。

急用,伪代码越详细、越完整越好。先谢谢了
...全文
614 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
丈八涯 2009-06-25
  • 打赏
  • 举报
回复
感觉问题描述的还是不够清晰,楼主所说的满足公式是否于走行的路径有关系.
如果有关系,那么就类似VSPTW问题.如果没有关系,那么就更好解决了,你把路径的据点满足属性标记出来,修改一下路径值就搞定.
bigbug9002 2009-06-21
  • 打赏
  • 举报
回复
准备:
顶点集:vexs[]
邻接矩阵:adjMatrix[][]
标志数组:isVisited[]
栈: trace;
DFS(vex){
do{
if(!isVisited[vex]){
trace.push(vex);
isVisited[vex]=true;
}
for(int i=0;i<vexs.length;i++)
if(adjMatrix[vex][i]==1&&funcA(i)&&!isVisited[i]) break; //找一个与vex邻接的,满足funcA的,没有被访问过的顶点。
if(i<vexs.length) //说明找到了满足条件的顶点 i
vex=i; //下一步的遍历从 i开始。
else{
//trace中存放的就是一条路径。这里可以对这条路径做相应的处理。
trace.pop(); //出栈,从vex已经没有路可走了。//这里也可以:如果栈顶不满足条件就一直做pop操作。
if(!trace.isEmpty()) vex=trace.top(); //准备从栈顶开始遍历

while(!trace.isEmpty());
}

allen303allen 2009-06-20
  • 打赏
  • 举报
回复
这是算法1的一个伪代码:

定义一个队列q,赋处置为入口节点
初始化所有节点为未访问状态
标记入口节点为已访问
while (队列非空)
{
A = q.front(); //取出队首节点
q.pop(); //弹出队首节点
for (所有的节点)//自己也可以先过滤出满足公式A的节点或使用邻接表表示图矩阵来提高效率
{
if (该节点未访问 && A存在指向该节点的路径 && 该节点满足公式A)
{
if (该节点的出度为0)
{
输出路径,结束
}
else
{
标记该节点为已访问
将该节点加入队列
标记该节点的前继节点为A //用于最后输出路径
}
}
}
}


算法2跟1是类似的,将满足公式B的作为终点节点,看懂了上面的,2就不难写出来了。
Aaron_Jerry 2009-06-19
  • 打赏
  • 举报
回复
麻烦大侠们给出伪代码吧,谢谢
neohope 2009-06-19
  • 打赏
  • 举报
回复
两个问题都可以用回朔
liliangbao 2009-06-19
  • 打赏
  • 举报
回复
帮顶~
ameyume 2009-06-18
  • 打赏
  • 举报
回复
帮顶
光宇广贞 2009-06-18
  • 打赏
  • 举报
回复
可以这样,
1、每个结点都有一个域去保存这个结点的性质,那么将从指定结点进入时,就使用DFS,去探索路径中结点的性质是否都满足A,这就等于探迷宫,满足A者为通,不满足者为堵,这就完成了。

2、就是1问的变种,一样DFS就可以。

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧