ВУЗ:
Составители:
Рубрика:
. Практикум по курсу «Алгоритмизация и программирование». Часть 2
return;
}
// цикл поиска непомеченных вершин,
// смежных s-ой вершине
for(j=0;j<g.n;j++)
if(x[j]==0 && g.a[s][j]>0 && g.a[s][j]!=MAX_INT)
// переход в смежную вершину с номером j
// рекурсивный вызов для поиска всех путей
// из j-ой вершины в t-ую
AllWays(g,j+1,t+1,x,k+1, sum+g.a[s][j]);
// возврат из s-ой вершины, снятие пометки о том,
// что s-ая вершина включена в путь
x[s]=0;
}
Для нерекурсивного варианта этой функции требуется только граф и но-
мера начальной и конечной вершин. Массив пометок, номер вершины в пути
и длина пути будут созданы внутри функции.
// определение нерекурсивной функции поиска всех путей
//в графе, соединяющих две заданные вершины
void AllWays(Graph2 g,int s, int t, int* x)
{
int v=s, // номер текущей вершины
k=2, // порядковый номер вершины в пути
jj=-1, // номер вершины, с которой начинается
// поиск смежных вершин
sum=0, // длина построенного пути
j,f,ii,nom;
if(s==t) return;
s--; t--;
// вспомогательный стек для хранения вершин возврата
Stack st;
st.head=NULL;
// пометка начальной вершины
x[v]=1;
while(true)
{
f=0;
115
. Практикум по курсу «Алгоритмизация и программирование». Часть 2
return;
}
// цикл поиска непомеченных вершин,
// смежных s-ой вершине
for(j=0;j0 && g.a[s][j]!=MAX_INT)
// переход в смежную вершину с номером j
// рекурсивный вызов для поиска всех путей
// из j-ой вершины в t-ую
AllWays(g,j+1,t+1,x,k+1, sum+g.a[s][j]);
// возврат из s-ой вершины, снятие пометки о том,
// что s-ая вершина включена в путь
x[s]=0;
}
Для нерекурсивного варианта этой функции требуется только граф и но-
мера начальной и конечной вершин. Массив пометок, номер вершины в пути
и длина пути будут созданы внутри функции.
// определение нерекурсивной функции поиска всех путей
//в графе, соединяющих две заданные вершины
void AllWays(Graph2 g,int s, int t, int* x)
{
int v=s, // номер текущей вершины
k=2, // порядковый номер вершины в пути
jj=-1, // номер вершины, с которой начинается
// поиск смежных вершин
sum=0, // длина построенного пути
j,f,ii,nom;
if(s==t) return;
s--; t--;
// вспомогательный стек для хранения вершин возврата
Stack st;
st.head=NULL;
// пометка начальной вершины
x[v]=1;
while(true)
{
f=0;
115
Страницы
- « первая
- ‹ предыдущая
- …
- 113
- 114
- 115
- 116
- 117
- …
- следующая ›
- последняя »
