Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2010, 20:09   #1
Deathsoul
 
Регистрация: 18.04.2010
Сообщений: 9
По умолчанию из рекурсии - цикл

помогите убрать рекурсию и добавить while.
или хотя бы подскажите с чего начать

Код:
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;
}
Deathsoul вне форума Ответить с цитированием
Старый 01.06.2010, 21:44   #2
Deathsoul
 
Регистрация: 18.04.2010
Сообщений: 9
По умолчанию

задача коммивояжера методом ветвей и границ. полный код

Код:
#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();
}
Deathsoul вне форума Ответить с цитированием
Старый 02.06.2010, 10:19   #3
Deathsoul
 
Регистрация: 18.04.2010
Сообщений: 9
По умолчанию

помогите с программой!
Deathsoul вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Цикл по времени - Как сделать так чтобы цикл выполнялся к примеру 10 секунд ? Anarki Общие вопросы C/C++ 3 13.11.2009 19:23
Рекурсии RAMA Паскаль, Turbo Pascal, PascalABC.NET 6 18.10.2009 13:56
Рекурсии Logan Паскаль, Turbo Pascal, PascalABC.NET 1 13.05.2008 08:52
Цикл с предусловием. ( цикл while) Цикл с постусловием. (цикл repeat ... until) Mr.User Помощь студентам 9 23.11.2007 01:34