Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Ответ
 
Опции темы
Старый 07.05.2010, 18:11   #1
dikr
Новичок
Джуниор
 
Регистрация: 07.05.2010
Сообщений: 3
По умолчанию Си найти минимальный путь от точки до точки

ОБХОД КОНЕМ!

Есть ли у кого-нибудь написанная программа на языке Си?
Есть подпрограмма, написанная мной обход конем.
Поле заполнено -2, по краям -1, чтобы не вылететь за край доски.
x и y начальная точка. -3 - там, куда я должен придти.

PHP код:
void xod_kon(int x,int y,int toch[2][2],int **pole,int m)
{   if(
pole[x][y]!=-3)
    
pole[x][y]=m;
else 
doska(n,pole);
if(
pole[x][y]!=-3)
{    if(
pole[x+1][y+2]==-|| pole[x+1][y+2]==-3  && pole[x+1][y+2]!=-1){fprintf(f1,"%i %i %i\n",x-2,y-2,m);xod_kon(x+1,y+2,toch,pole,m+1);}
    if(
pole[x-1][y+2]==-|| pole[x-1][y+2]==-3  && pole[x-1][y+2]!=-1){fprintf(f1,"%i %i %i\n",x-2,y-2,m);xod_kon(x-1,y+2,toch,pole,m+1);}
    if(
pole[x+2][y-1]==-|| pole[x+2][y-1]==-3  && pole[x+2][y-1]!=-1){fprintf(f1,"%i %i %i\n",x-2,y-2,m);xod_kon(x+2,y-1,toch,pole,m+1);}
    if(
pole[x+2][y+1]==-|| pole[x+2][y+1]==-3  && pole[x+2][y+1]!=-1){fprintf(f1,"%i %i %i\n",x-2,y-2,m);xod_kon(x+2,y+1,toch,pole,m+1);}
    if(
pole[x+1][y-2]==-|| pole[x+1][y-2]==-3  && pole[x+1][y-2]!=-1){fprintf(f1,"%i %i %i\n",x-2,y-2,m);xod_kon(x+1,y-2,toch,pole,m+1);}
    if(
pole[x-1][y-2]==-|| pole[x-1][y-2]==-3  && pole[x-1][y-2]!=-1){fprintf(f1,"%i %i %i\n",x-2,y-2,m);xod_kon(x-1,y-2,toch,pole,m+1);}
    if(
pole[x-2][y+1]==-|| pole[x-2][y+1]==-3  && pole[x-2][y+1]!=-1){fprintf(f1,"%i %i %i\n",x-2,y-2,m);xod_kon(x-2,y+1,toch,pole,m+1);}
    if(
pole[x-2][y-1]==-|| pole[x-2][y-1]==-3  && pole[x-2][y-1]!=-1){fprintf(f1,"%i %i %i\n",x-2,y-2,m);xod_kon(x-2,y-1,toch,pole,m+1);} 
}else 
fprintf(f1,"%i %i %i\n",x-2,y-2,m);

dikr вне форума Ответить с цитированием
Старый 08.05.2010, 14:07   #2
dikr
Новичок
Джуниор
 
Регистрация: 07.05.2010
Сообщений: 3
По умолчанию

Почему же никто не может помочь мне?
dikr вне форума Ответить с цитированием
Старый 08.05.2010, 15:12   #3
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Я могу найти свои сорсы на минимальный путь одним или 2 конями к заданной точке, но они на Паскале и с немного другой идейно реализацией.
LeBron вне форума Ответить с цитированием
Старый 09.05.2010, 06:47   #4
dikr
Новичок
Джуниор
 
Регистрация: 07.05.2010
Сообщений: 3
По умолчанию

Это конечно здорово, кидайте!

НО МНЕ БЫ ВСЕ-ТАКИ на СИ! Неужели никто не делал такую работу?
dikr вне форума Ответить с цитированием
Старый 09.05.2010, 11:58   #5
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Цитата:
Сообщение от dikr Посмотреть сообщение
Это конечно здорово, кидайте!

НО МНЕ БЫ ВСЕ-ТАКИ на СИ! Неужели никто не делал такую работу?
Так трудно перевести что ли?
Вот задача, вот мой сорс:
Код:
program pl;
var input,output:text;n,a,b,c,d,i,j,q,w,e:longint;ar:array[1..20,1..20] of longint;
begin
assign(input,'input.txt');reset(input);assign(output,'output.txt');rewrite(output);
readln(input,n);
readln(input,a,b);readln(input,c,d);   
for i:=1 to n do for j:=1 to n do ar[i,j]:=10000;
ar[a,b]:=0;
for i:=1 to n do begin for j:=1 to n do begin if abs((i-a)*(j-b))=2 then ar[i,j]:=1;end;end;
for i:=1 to n*n do begin for j:=1 to n do begin for q:=1 to n do begin  if ar[j,q]=i then begin
for w:=1 to n do begin for e:=1 to n do begin if (abs((w-j)*(q-e))=2) and (ar[w,e]>i+1) then begin ar[w,e]:=i+1;
end;end;end;end;end;end;end;
writeln(output,ar[c,d]);
close(input);close(output);
end.
Как видите, тогда писал обычным перебором динамики. Если надо быстрее, так как доска в много раз больше стандартной 8*8 - пишите БФС.
LeBron вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти точки на координатной плоскости vovey Помощь студентам 6 07.04.2010 13:35
Найти величину и угол наклона полного ускорения точки tatee Помощь студентам 0 07.12.2009 19:08
Имеются координаты точки. Как проверить какого цвета соседние точки на форме? Rin Мультимедиа в Delphi 2 10.11.2009 23:47
даны две точки. организовать движение из точки А в точку Б окружности! Wi1D Помощь студентам 6 23.05.2009 19:55
Отбражение чисел - точки, это точки, а не запятые, обозначающие дробную часть Дикий Помощь студентам 7 12.05.2008 17:57