Перевести код с Паскаля на СИ - C (СИ) (156884)
Формулировка задачи:
Попробовал перевести но выдает не те результаты. Не подскажите где ошибка?
Program P1;
Var Map: Array[1..100,1..100] of Integer;
S,G,F: Array[1..100] of Integer;
A,I,B,J,N,M,K,L,P,R: Integer;
Begin
Readln(N,M);
For A:=1 to N do
For B:=1 to N do
Map[A,B]:=16000;
For I:=1 to M do
begin
Read(L);
For J:=1 to L do
Read(S[J]);
For A:=1 to L do
For B:=1 to L do
Map[S[A],S[B]]:=1;
End;
For A:=1 to N do
For B:=1 to N do
For I:=1 to N do
If Map[A,B]>Map[A,I]+Map[I,B] then Map[A,B]:=Map[A,I]+Map[I,B];
Read(K);
A:=0;
For I:=1 to K do
begin
Readln(G[I],S[I],F[I]);
A:=A+G[I];
End;
P:=0;
R:=P;
For I:=1 to N do
begin
P:=0;
For J:=1 to K do
begin
If I=S[J] then begin P:=P+G[J]; continue; End;
If Map[I,S[J]]=16000 then begin P:=0; Break; End;
If (Map[I,S[J]]*4>G[J]) and (F[J]=0) then begin P:=0; Break; End;
If F[J]=1 then begin P:=P+G[J]; Continue; End;
P:=P+G[J]-Map[I,S[J]]*4;
End;
If P>R then
begin
R:=P;
L:=I;
End;
End;
If R<>0 then Writeln(L,' ',A-R)
else Writeln(0);
End.#include <stdio.h>
void main()
{
int map[100][100],s[100],g[100],f[100],a,b,i,j,n,m,k,l,p,r;
scanf("%d%d",&n,&m);
for(a=0;a<n;a++)
for(b=0;b<n;b++)
map[a][b]=16000;
for(i=0;i<m;i++)
{
scanf("%d",&l);
for(j=0;j<l;j++)
scanf("%d",&s[j]);
for(a=0;a<l;a++)
for(b=0;b<l;b++)
map[s[a]][s[b]]=1;
}
for(a=0;a<n;a++)
for(b=0;b<n;b++)
for(i=0;i<n;i++)
if(map[a][b]>map[a][i]+map[i][b])
map[a][b]=map[a][i]+map[i][b];
scanf("%d",&k);
a=0;
for(i=0;i<k;i++)
{
scanf("%d%d%d",&g[i],&s[i],&f[i]);
a+=g[i];
}
p=0;
r=p;
for(i=0;i<n;i++)
{
p=0;
for(j=0;j<k;j++)
{
if(i==s[j]) { p+=g[j]; continue;}
if(map[i][s[j]]=16000) {p=0; break;}
if(map[i][s[j]]*4>g[j] && f[j]==0) { p=0; break;}
if(f[j]=1) { p+=g[j]; continue;}
p+=g[j]-map[i][s[j]]*4;
}
if(p>r) { r=p; l=i;}
}
if(r!=0) printf("%d %d",l,a-r);
else putchar('0');
system("PAUSE");
}Решение задачи: «Перевести код с Паскаля на СИ»
textual
Листинг программы
==