Kezdőoldal » Számítástechnika » Programozás » SOS! HELP ME! Két feladatot...

SOS! HELP ME! Két feladatot meg kell oldanom pascal nyelven leprogramozva. És elakadtam, valaki segítene?

Figyelt kérdés

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!



2017. jún. 29. 08:55
1 2
 1/14 anonim ***** válasza:
Oké, és hol akadtál el? Mi van eddig kész? Ugye nem azt várod, hogy HELYETTED csináljuk meg?
2017. jún. 29. 09:15
Hasznos számodra ez a válasz?
 2/14 A kérdező kommentje:

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...:/

2017. jún. 29. 09:25
 3/14 anonim ***** válasza:
Ennek a kommentnek nem tudom mennyi értelme volt.
2017. jún. 29. 09:28
Hasznos számodra ez a válasz?
 4/14 anonim ***** válasza:

Egyébként az autóversenyeshez:


[link]


Várososhoz gráfbejárás.

2017. jún. 29. 09:30
Hasznos számodra ez a válasz?
 5/14 A kérdező kommentje:

{

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...

2017. jún. 29. 09:34
 6/14 anonim ***** válasza:
Ok, azt hiszem jelentem a kérdést.
2017. jún. 29. 09:36
Hasznos számodra ez a válasz?
 7/14 anonim ***** válasza:

"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ó?

2017. jún. 29. 09:45
Hasznos számodra ez a válasz?
 8/14 A kérdező kommentje:
A sulim nem tanítja kellő képen a programoyást, és muszáj vagyok így megoldani, mert elvárni elvárnak sokmindent.
2017. jún. 29. 09:55
 9/14 anonim ***** válasza:
Ha nem tanítják, tanítsd magadat. Netről rengeteg anyagot le tudsz szedni, amiből meg tudod tanulni. Ha mindent készen kapsz, sosem tanulod meg.
2017. jún. 29. 09:59
Hasznos számodra ez a válasz?
 10/14 A kérdező kommentje:
Nem, viszont 1 hét alatt nem tudom behozni a lemaradást, ezért kellene a segítség
2017. jún. 29. 10:07
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!