Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Deathsoul
0 / 0 / 0
Регистрация: 18.04.2010
Сообщений: 3
#1

из рекурсии - цикл - C++

01.06.2010, 20:12. Просмотров 445. Ответов 2
Метки нет (Все метки)

помогите убрать рекурсию и поставить while.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int perest(int l,int **a,int **r,int *p,int n,int &sum,int &max)
{
    int i,temp;
    if(l==0)
    {
        r=Path(a,r,p,n,sum,max);
    }
    else
        for(i=0;i<l;i++)
        {
            perest(l-1,a,r,p,n,sum,max);
            if(i<l-1)
            {
                temp=p[i];
                p[i]=p[l-1];
                p[l-1]=temp;
                p=reverse(l-1,p);
            }
        }
        return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2010, 20:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос из рекурсии - цикл (C++):

Почему цикл на при 1 уходит в бесконечный цикл? - C++
#define _CRT_SECURE_NO_WARNINGS #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;string.h&gt; int main() { int x=0, y=0,...

Цикл: цикл for вообще никак не воспринимается транслятором - C++
Пишу программу, которая производит различные действия с одномерным массивом. Возникла следующая проблема: цикл for вообще никак не...

Задание на цикл с параметром и цикл с постусловием - C++
Помогите пожалуйста написать программу с этими циклами. 1. Вычислить и напечатать таблицу значений функции Z= (e^-x)sinx для 0&lt;=x&lt;=П,...

Цикл for/Цикл while Помогите срочно пожалуйста... - C++
1.Вычислить и вывести на экран в виде таблицы значения функции F от x1 до x2 с шагом dx. где a, b и c - действительные числа. 2.Цикл...

рекурсии... - C++
задание: Во входном файле задано без ошибок логическое выражение следующего вида : &lt;логическое выражение&gt;::=...

Цикл с параметром и цикл с условием - C++
1. Составить программу вычисления суммы первых 10 непарных чисел 2. Дано числовой ряд и некоторое число &quot;епсила&quot;. Найти сумму...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Qwerty_coder
29 / 29 / 2
Регистрация: 14.12.2009
Сообщений: 79
01.06.2010, 20:54 #2
Deathsoul, задание в студию... Без него, увы, тебе никто не сможет помочь
0
Deathsoul
0 / 0 / 0
Регистрация: 18.04.2010
Сообщений: 3
01.06.2010, 21:33  [ТС] #3
Задача коммивояжера методом ветвей и границ

код на С

Код
#include <conio.h>
#include <stdio.h>
#include <string.h>

int **MATRIX_1(int &n,char name[])
{	
	FILE * f;
	f=fopen(name,"r");
	if(f==NULL)
		return NULL;
	fscanf(f,"%d ",&n);
	int **M=new int *[n];
	for (int i=0;i<n;i++)
		M[i]=new int[n];
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{	
			fscanf(f,"%d",&M[i][j]);
				printf("%d\t",M[i][j]);
		}
		printf("\n");
	}
	printf("\n");
	fclose(f);
	return M;
}

int **Path(int **a,int **r,int *p,int n,int &sum,int &max)
{
	int i,j,s;
	s=0;
	for(i=0;i<n-1;i++)
	{
		s=s+a[p[i]][p[i+1]];
	}
	s=s+a[p[n-1]][p[0]];
	if(s<=sum)
	{
		for(j=0;j<n;j++)
		{
			r[max][j]=p[j];
		}
	r[max][n]=s;
	sum=s;
	max++;
	}
	return r;
}
int *reverse(int k,int *p)
{
	int i,j,temp;
	j=0;
	while(j<k-1)
	{
		temp=p[j];
		p[j]=p[k-1];
		p[k-1]=temp;
		j++;
		k--;
	}
	return p;
}

int perest(int l,int **a,int **r,int *p,int n,int &sum,int &max)
{
	int i,temp;
	if(l==0)
	{
		r=Path(a,r,p,n,sum,max);
	}
	else
		for(i=0;i<l;i++)
		{
			perest(l-1,a,r,p,n,sum,max);
			if(i<l-1)
			{
				temp=p[i];
				p[i]=p[l-1];
				p[l-1]=temp;
				p=reverse(l-1,p);
			}
		}
		return 0;
}

int Kommi(char name[])
{
	int n,i,j;
	int **M=MATRIX_1(n,name);
	if(M==NULL)
		return NULL;
	int *p=new int[n];
	for(i=0;i<n;i++)
		p[i]=i;
	int **r=new int*[120];
	for(i=0;i<120;i++)
		r[i]=new int[n+1];
	int max=0;
	int sum=10000;
	perest(n,M,r,p,n,sum,max);
	printf("Bazovyi cikl \t");
	for(j=0;j<n;j++)
		printf("%d\40",r[0][j]+1);
	printf("%d\40",r[0][0]+1);
	printf("\t%d\n",r[0][n]);
	printf("\nReshenie:\n");
	for(i=1;i<max;i++)
	{
		if(r[i][n]==sum)
		{
		for(j=0;j<n;j++)
			printf("%d\40",r[i][j]+1);
		printf("%d\40",r[i][0]+1);
		printf("\t%d\n",r[i][n]);
		}
	}
}

void main()
{
	char name[32];
	printf ("Vvedite imya faila\n");
	fflush(stdin);
	gets(name);
	if(Kommi(name)==NULL)
		printf("\nError!\n");;
	getch();
}

код на паскале, который переделывал (но там тоже рекурсия)

Код
Uses CRT;

Const FileName = '1.txt';
N = 5;

Type My = Array [1..N] Of Byte;

Var P : My;
F : Text;
A,R : Array [1..N,1..N] of Word;
I,J,Pb,Max : Byte;
code,Sum : Word;
S,Ts : String;

Procedure Path(M:My);
Var I,J : Byte;
S : Word;
Begin
S := 0;
For I := 1 To N-1 Do S := S + A[M[i],M[I+1]];
S := S + A[M[N],M[1]];
If S <= Sum Then Begin
For J := 1 To N Do R[J,Max] := M[J];
Sum := S;
Inc(Max);
End;
End;

Procedure Reverse(K:Byte);
Var J,I,Temp : Byte;
Begin
J := 1;
While J < K Do Begin
Temp := P[J];
P[J] := P[K];
P[K] := Temp;
J := J + 1;
K := K - 1;
End;
End;

Procedure PerestArray(M:Byte);
Var I,Temp : Byte;
Begin
If M = 1 Then Path(P)
Else For I := 1 To M Do Begin
PerestArray(M-1);
If I < M Then Begin
Temp := P[i];
P[i] := P[M];
P[M] := Temp;
Reverse(M-1);
End;
End;
End;

Function Summ:Integer;
Var I : Byte;
T : Integer;
Begin
T := 0;
For I := 1 To N Do Begin
T := T + A[I,P[i]];
End;
Summ := T;
End;

Begin
ClrScr;

Assign(F,FileName);
Reset(F);
For I := 1 To N Do Begin
ReadLn(F,S);
J := 1;
While Pos(' ',S) <> 0 Do Begin
Pb := Pos(' ',S);
Ts := Copy(S,1,Pb-1);
Val(Ts, A[I,J], code);
Delete(S,1,Pb);
Inc(J);
End;
Val(S, A[I,J], code);
End;
Close(F);

WriteLn;
For I := 1 To N Do Begin
For J := 1 To N Do Write(A[I,J]:3);
WriteLn;
End;

WriteLn;
WriteLn('Reshenie:');

For I:=1 To N Do P[i]:=I;
Max := 0;
Sum := Maxint;
PerestArray(N);

For I:=1 To Max Do Begin
For J := 1 To N Do Write(R[J,I]:3);
WriteLn(Sum:5);
End;
WriteLn;
End.
Добавлено через 16 минут
ну вот и задания и готовый пример, но с рекурсией. помогите сделать функцию perest с циклом.
до завтрашнего дня
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2010, 21:33
Привет! Вот еще темы с ответами:

Кэширование рекурсии - C++
Доброго времени суток. Есть задача. Сделать хотелось именно рекурсией(с циклами тривиально слишком), но я наткнулся на подводный...

сложности по рекурсии в С++ - C++
Правильно ли, что в функции: { if (number &lt; 0) { cout &lt;&lt; '-' &lt;&lt; endl; super_write_vertical(abs(number)); } else if...

Возврат рекурсии - C++
Подскажите пожалуйста почему при выполнении второго for возвращается одно и то же значение.void r(int* ar,int n) { if(n==1) return; ...

Ошибка в Рекурсии с++ - C++
Здравствуйте,у меня в данном коде выбивает ошибку в строке 23 .В рекурсии я не силён и прошу вашей помощи в решении данной...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru