Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > Массивы


Автор: 13KAIN 20.3.2006, 16:25
Помогите с курсовой. Мне надо найти наименьший путь по сумму чисел из левого края матрицы в правый, короче надо найти наименьшую сумму чисел.Помогите плиз smile smile smile
НАПРИМЕР!!!
8 5 6
1 4 3
2 9 7 ----> (наименьший путь) 8+1+4+3+7= 23

МАТРИЦА КВАДРАТНАЯ (10х10, 3х3 и т.д)

Автор: _hunter 20.3.2006, 16:47
ты с разделом ошибся. тебе в раздел "работа" нужно

Автор: Earnest 20.3.2006, 16:51
Для домашних заданий, курсовых, существует "Центр Помощи"

Автор: 13KAIN 20.3.2006, 16:55
Так мож сейчас подскажите !!

Автор: Romikgy 20.3.2006, 17:00
перебор всех вариантов, а потом выбираешь с найменьшей суммой

Автор: 13KAIN 20.3.2006, 17:04
Вот мне это и надо, тока я не знаю как это сделать smile

Автор: Romikgy 20.3.2006, 17:09
Цитата(13KAIN @ 20.3.2006, 15:25 Найти цитируемый пост)
НАПРИМЕР!!!
8 5 6
1 4 3
2 9 7 ----> (наименьший путь) 8+1+4+3+7= 23

может с 2 лучше начать?
Добавлено @ 17:11
какой язык?

Автор: Akina 20.3.2006, 17:59
ОБычный волновой алгоритм. Неоднократно обсуждался и упоминался на форуме. В поиск плиз.

Автор: Lamak 21.3.2006, 01:13
Тебе нужен алгоритм или код проги на какомто языке?

Автор: 13KAIN 21.3.2006, 11:35
Язык С++ и на Билдере буду делать.
Проблема в том что у мене кода нет подходящёго

Автор: 13KAIN 22.3.2006, 09:35
Народ ну помогите ПЛИЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗ smile smile

Автор: Romikgy 22.3.2006, 09:41
Цитата(Akina @ 20.3.2006, 16:59 Найти цитируемый пост)
волновой алгоритм


Автор: londinium 22.3.2006, 11:49
Здравствуйте!

Исходники волнового алгоритма на Delphi можно забрать с delphikingdom.com . Там красивые программы - с графической визуализацией.

Автор: 13KAIN 22.3.2006, 17:26
smile
smile
Romikgy можешь привести уже готовые примеры с форума.

Автор: Romikgy 22.3.2006, 17:57
13KAIN, может и решение найдешь
http://forum.vingrad.ru/index.php?showtopic=38189&hl=%D0%B2%D0%BE%D0%BB%D0%BD%D0%BE%D0%B2%D0%BE%D0%B9,and,%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC
Добавлено @ 17:59
http://forum.vingrad.ru/index.php?act=Search&CODE=show&searchid=fa057916b11ec00e62300e840da2067e&search_in=posts&result_type=topics&flag=search&debug=&highlite=%E2%EE%EB%ED%EE%E2%EE%E9+and+%E0%EB%E3%EE%F0%E8%F2%EC&skipped=

Автор: 13KAIN 22.3.2006, 19:09
Слухай я тут надыбал такую же задачу тока на Паскале вроде чёто сделано
БЛИН НА С++ НАДА smile
http://forum.vingrad.ru/index.php?showtopic=64807

Спасиб за ссылки !!!

Автор: darkart 22.3.2006, 19:26
Не волновой, тупой перебор, да я его еще и не тестил:
Код

#include<iostream>
#include<conio.h>
using namespace std;
void InputMatrix(int** Matrix,int dim)
//ввод квадратной матрицы размерности dim x dim
{
    for(int i=0;i<dim;i++)
        for(int j=0;j<dim;j++)
            cin>>Matrix[i][j];

}
void PrintMatrix(int** Matrix,int dim)
//печать квадратной матрицы размерности dim x dim
{
    for(int i=0;i<dim;i++)
    {
        for(int j=0;j<dim-1;j++)
            cout<<Matrix[i][j]<<" ";
        cout<<Matrix[i][dim-1]<<"\n";
    }
}
void FindMinPath(int** Matrix,int dim,int i,int j,int step,int sum,int& bestsum)
{
    sum+=Matrix[i][j];//добавляем значение ячейки
    if(step<dim*dim&&(sum<bestsum||!bestsum))//ходов не может быть больше, чем размерность в квадрате
    {    
        if(i==dim-1&&j==dim-1)//если правый нижний угол
        {
            bestsum=sum;//запоминаем лучшее значение
        }
        else
        {
            step++;//увеличение шага
            if(i)FindMinPath(Matrix,dim,i-1,j,step,sum,bestsum);//для левой ячейки
            if(j)FindMinPath(Matrix,dim,i,j-1,step,sum,bestsum);//для нижней ячейки
            if(i<dim-1)FindMinPath(Matrix,dim,i+1,j,step,sum,bestsum);//для правой ячейки
            if(j<dim-1)FindMinPath(Matrix,dim,i,j+1,step,sum,bestsum);//для верхней ячейки
        }    
    }
}
int main()
{
    int dim,bestsum=0;//dim -размерность, bestsum - лучший результат
    cout<<"Please enter a dimensionality:\n";
    cin>>dim;//ввод размерности
    int** Matrix;//указатель на матрицу
    Matrix=new int*[dim];
    for(int i=0;i<dim;i++)
        Matrix[i]=new int[dim];
    cout<<"Please enter a matrix("<<dim<<"x"<<dim<<"):\n";
    InputMatrix(Matrix,dim);
    cout<<"Source matrix:\n";
    PrintMatrix(Matrix,dim);
    FindMinPath(Matrix,dim,0,0,0,0,bestsum);//рекурсивный поиск
    for(int i=0;i<dim;i++)
        delete[] Matrix[i];
    delete[] Matrix;    
    cout<<"Min path="<<bestsum<<"\n";//вывод результата
    getch();
    return 0;
}

P.S. надеюсь работает

Автор: 13KAIN 22.3.2006, 21:15
Парни я хочу в эту прогу код закинуть

Код


Unit1.cpp

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CSPIN"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
int i,j, k=0;  //НАЧАЛО     //ВОТ В МЕСТО ЭТОГО КОДА Я И ХОЧУ ПОСТАВИТЬ СВОЙ ДЛЯ РАСЧЁТА СУММЫ!!!!
for(i=0;i<n;i++)
for(j=0;j<m;j++)
 { b[k]=a[i][j];k++;}
 StringGrid2->RowCount=0;
 StringGrid2->ColCount=m*n;
for(j=0;j<m*n;j++)
 StringGrid2->Cells[j][0]=b[j];   // КОНЕЦ
}
//---------------------------------------------------------------------------


void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
int i,j;
 n=CSpinEdit1->Value;
 m=CSpinEdit2->Value;
 StringGrid1->RowCount=n;
 StringGrid1->ColCount=m;
 randomize;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
 a[i][j]=random(10)-random(7);
for(i=0;i<n;i++)
for(j=0;j<m;j++)
 StringGrid1->Cells[j][i]=a[i][j];
 StringGrid1->RowCount=n;
 StringGrid1->ColCount=m;
}
//---------------------------------------------------------------------------


Код


Unit1.h

//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include "CSPIN.h"
#include <Buttons.hpp>
#include <ComCtrls.hpp>
#include <Grids.hpp>
#include <AppEvnts.hpp>
#include <ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TLabel *Label1;
        TLabel *Label2;
        TPageControl *PageControl1;
        TCSpinEdit *CSpinEdit1;
        TCSpinEdit *CSpinEdit2;
        TBitBtn *BitBtn1;
        TBitBtn *BitBtn2;
        TTabSheet *TabSheet1;
        TTabSheet *TabSheet2;
        TStringGrid *StringGrid1;
        TStringGrid *StringGrid2;
        void __fastcall BitBtn2Click(TObject *Sender);
        void __fastcall BitBtn1Click(TObject *Sender);
private:    // User declarations
public: int a[10][10],b[100],n,m; 
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


РАБОЧАЯ ПРОГА НА 100%


Автор: IvanK2 6.4.2006, 09:20
darkart большое спасибо. Всё курсовую я сдал благодаря тебе.

Автор: darkart 6.4.2006, 19:40
Рад был помочьsmile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)