SOS! HELP ME! Két feladatot meg kell oldanom pascal nyelven leprogramozva. És elakadtam, valaki segítene?
Ez a két feladat:
Az autóverseny-játékot kockás papíron játsszák. Erre berajzolják egy kacskaringós autóút két szélét, a rajt-, illetve a célvonalat. A versenyzők – felváltva – egy négyzet csúcsából egy másik csúcspontba (rácspontból rácspontba) léphetnek, nem feltétlenül a szomszédosra, de a pályáról nem mehetnek ki. Az győz, aki előbb ér a rajttól a célig. Keressük meg a legkevesebb irányváltoztatással járó utat!
S a másik:
Ismert egy ország úthálózata, azaz, hogy mely városok között vannak direkt utak, és mennyi ezek hossza. Határozza meg (egy utazó kereskedő részére) a legrövidebb olyan körutat, amely minden várost érint egyszer és csakis egyszer (kivéve az indulási várost)!
Előre is köszönöm a válaszokat!
C++ban megleltem,
#include<stdio.h>
#include<conio.h>
#include<iostream>
using namespace std;
int c = 0,cost = 999;
int graph[4][4] = { {0, 10, 15, 20},
{10, 0, 35, 25},
{15, 35, 0, 30},
{20, 25, 30, 0}
};
void swap (int *x, int *y)
{
int temp;
temp = *x;
*x = *y;
*y = temp;
}
void copy_array(int *a, int n)
{
int i, sum = 0;
for(i = 0; i <= n; i++)
{
sum += graph[a[i % 4]][a[(i + 1) % 4]];
}
if (cost > sum)
{
cost = sum;
}
}
void permute(int *a, int i, int n)
{
int j, k;
if (i == n)
{
copy_array(a, n);
}
else
{
for (j = i; j <= n; j++)
{
swap((a + i), (a + j));
permute(a, i + 1, n);
swap((a + i), (a + j));
}
}
}
int main()
{
int i, j;
int a[] = {0, 1, 2, 3};
permute(a, 0, 3);
cout<<"minimum koltseg:"<<cost<<endl;
getch();
}
De ennek nem tudom mennyi értelme van...:/
{
Travelling salesman problem
}
program TSP;
const
MatrixFileName = 'Matrix.txt';
Infinity = 9999;
type
TAdjacentMatrix = array of array of integer;
TArray = array of integer;
TVisited = array of boolean;
function ReadAdjacentMatrix(var M: TAdjacentMatrix; var n: integer): boolean;
label
ToCloseFile, ToExitProc;
var
f: Text;
i, j: integer;
Res: boolean;
begin
Res := True;
{$I-}
Assign(f, MatrixFileName);
reset(f);
Res := (IOResult = 0);
if not res then
goto ToExitProc;
readln(f, n);
Res := (IOResult = 0);
if not res then
goto ToCloseFile;
SetLength(M, n, n);
for i := 0 to pred(n) do
begin
for j := 0 to pred(n) do
begin
Read(f, M[i, j]);
Res := (IOResult = 0);
if not Res then
goto ToCloseFile;
end;
readln(f);
Res := (IOResult = 0);
if not Res then
goto ToCloseFile;
end;
ToCloseFile:
Close(f);
ToExitProc:
ReadAdjacentMatrix := Res;
{$I+}
end;
procedure ShowPath(Path: TArray; N: integer);
var
i: integer;
begin
for i := 0 to N - 1 do
Write(chr(Ord('A') + Path[i]): 2);
writeln;
end;
function Solve(var M: TAdjacentMatrix; var n: integer; Path: TArray): boolean;
var
MinLength: integer;
Visited: TVisited;
CurrLength: integer;
function DFS(Vertex, Depth: integer): boolean;
var
i: integer;
Res: boolean;
begin
Visited[Vertex] := True;
Res := False;
if Depth = N - 1 then
begin
Res := (CurrLength < MinLength);
if Res then
MinLength := CurrLength;
end
else
begin
for i := 0 to N - 1 do
begin
if (not Visited[i]) and (M[Vertex, i] <> Infinity) then
begin
CurrLength := CurrLength + M[Vertex, i];
if CurrLength <= MinLength then
{$B-}
Res := DFS(i, Depth + 1) or Res;
{$B+}
CurrLength := CurrLength - M[Vertex, i];
end;
end;
end;
if Res then
Path[Depth] := Vertex;
Visited[Vertex] := False;
DFS := Res;
end;
var
i: integer;
begin
MinLength := Infinity;
CurrLength := 0;
SetLength(Visited, N);
for i := 0 to N - 1 do
Visited[i] := False;
Solve := DFS(0, 0);
end;
var
M: TAdjacentMatrix;
N: integer;
Path: TArray;
begin
if not ReadAdjacentMatrix(M, N) then
Exit;
SetLength(Path, N);
if Solve(M, N, Path) then
begin
writeln('Path:');
ShowPath(Path, N);
end
else
begin
writeln('No solution');
end;
end.
Itt hibát ír ki a devpas...
"Itt hibát ír ki a devpas..."
Szóval a feladatmegoldás nálad azt jelenti, hogy a netről levadászol kész megoldásokat tokkal vonóval, és ezután a kisebb hibákat is nekünk kell debugolni, hogy még azon se kelljen gondolkodnod.
Szerinted ez így rendjén való?
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!