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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2011, 18:58   #1
xakkkkker
Форумчанин
 
Аватар для xakkkkker
 
Регистрация: 15.12.2007
Сообщений: 226
По умолчанию Перевести с С++ на Паскаль

Помогите перевести с С++ на Паскаль
Код:
#include <iostream>
#define MAX_SIZE 102
#define MIN_VALUE -5e4
using namespace std;
struct edge
{
	int num;
	int weight;
	edge()
	{
		num = 0;
		weight = 0;
	}
	edge(int n ,int w)
	{
		num = n;
		weight = w;
	}
};
struct vertex
{
	edge left,right;
};
int n, totalEdges;
int adjMatrix[MAX_SIZE][MAX_SIZE]; // матрица смежности
vertex adj[MAX_SIZE]; // двоичное дерево
int edgesAmount[MAX_SIZE];
int mem[MAX_SIZE][MAX_SIZE];

void dfs(int num)
{
	bool isLeft = true;
	for (int i=1;i<=n;i++)
	{
		if (adjMatrix[num][i])
		{
			if (isLeft)
				adj[num].left  = edge(i,adjMatrix[num][i]);
			else
				adj[num].right = edge(i,adjMatrix[num][i]);
			
			isLeft = false;
			adjMatrix[num][i] = adjMatrix[i][num] = 0;
			
			dfs(i);

			edgesAmount[num] += edgesAmount[i] + 1;
		}
	}
}
void input()
{
	cin>>n>>totalEdges;
	int f,s,w;
	for (int i=0;i<n-1;i++)
	{
		cin>>f>>s>>w;
		adjMatrix[f][s] = adjMatrix[s][f] = w;
	}
	dfs(1);
}
int f(int num, int edges)
{
	if (mem[num][edges])
		return mem[num][edges];

	edge left = adj[num].left;
	edge right = adj[num].right;

	if (edges == 0) return 0;

	if (edges > edgesAmount[num])
		return MIN_VALUE;

	if (edges == 1)
		return max(left.weight, right.weight);

	int res = 0;
	for (int i = 0 ;i<= edges ;i++)
	{
		int leftEdges = i;
		int rightEdges = edges - i;

		int leftValue = 0, rightValue = 0;
		if (leftEdges)
			leftValue = left.weight + f(left.num,leftEdges - 1);
		if (rightEdges)
			rightValue = right.weight + f(right.num, rightEdges - 1);
		int cur = leftValue + rightValue;
		res = max(res,cur);
	}
	mem[num][edges] = res;
	return res;
}
void solve()
{
	int res = f(1,totalEdges);
	cout<<res;
}
int main()
{
	/*freopen("input.txt","r",stdin);
	freopen("output.txt","w",stdout);*/

	input();
	solve();
	return 0;
}
xakkkkker вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перевести код паскаль в C# andresan Помощь студентам 6 20.10.2013 21:51
Перевести в Турбо Паскаль Karina89 Помощь студентам 2 31.03.2011 14:42
Перевести из С++ в паскаль Ver-Mishel Помощь студентам 0 15.02.2011 20:52
Перевести С++ в Паскаль alphadog900 Помощь студентам 6 11.12.2010 18:41