IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Алгоритм определения компонент двусвязности Графа
сообщение
Сообщение #1


Гость






Помогите, нужна программа по определению компонент двусвязности Графа.
Есть программа на СИ, может кто то поможет ее переделать?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


как задан граф хотя бы написала бы...


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






как вам угодно
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Пжлста, вот, то, что есть на СИ:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
namespace DvusvyaZannost
{ public partial class Form1 : Form
{ public Form1()
{ InitializeComponent();
}
public static int y = 10, x = 5, startind;
private void button1_Click(object sender, EventArgs e)
{ }
private void Form1_Load(object sender, EventArgs e)
{ }
private void menuItem2_Click(object sender, EventArgs e)
{
int[,] mas = new int[textBox1.Lines.Length, textBox1.Lines.Length];
int[] per = new int[textBox1.Lines.Length];
ArrayList al = new ArrayList(10);
for (int i = 0; i < textBox1.Lines.Length; i++)
{
string str = (textBox1.Lines[i]).Trim();
string[] st = str.Split(' ');
for (int j = 0; j < textBox1.Lines.Length; j++)
{
mas[i, j] = int.Parse(st[j].Trim());
if (mas[i, j] == 1) per[i]++;
} }
int kol = 0,min = 10;
for (int i = 0; i < per.Length; i++)
{
if (per[i] == 1) kol++;
}
int[,] masx = new int[textBox1.Lines.Length - kol, textBox1.Lines.Length - kol];
int coaf = 0;
for (int i = 0; i < textBox1.Lines.Length; i++)
{
if (per[i] == 1)
{
for (int j = 0; j < textBox1.Lines.Length; j++)
{
if (mas[i, j] == 1)
{
coaf = j;
for (int g = 0; g < textBox1.Lines.Length - kol; g++)
{
if (g == i) i++;
for (int h = 0; h < textBox1.Lines.Length - kol; h++)
{
if (j == h) j++;
masx[g, h] = mas[i, j];
}}}
pictureBox1.Refresh();
Graphics gr = pictureBox1.CreateGraphics();
SolidBrush brh=new SolidBrush(Color.Red);
Font fr=new Font("Times New Roman",15);
string s = "т. " + coaf.ToString() + " т. двусвязанности";
gr.DrawString(s, fr, brh, new Point(x, y));
y += 15;
s=i.ToString()+" "+coaf.ToString()+" компонента двусвяз";
gr.DrawString(s, fr, brh, new Point(x, y));
y += 15;
gr.Dispose();
}}
int indnext = 0, indput = 0;
int[] put = new int[textBox1.Lines.Length];
for (int i = 0; i < (textBox1.Lines.Length - kol); i++)
{
for (int j = 0; j < (textBox1.Lines.Length - kol); j++)
{
if (masx[i, j] == 1)
{
indnext = j;
break;
}}
put[indput] = indnext;
indput++;
for (int j = 0; j < (textBox1.Lines.Length - kol); j++)
{
if (masx[indnext, j] == 1 && per[j] > per[indnext] && indnext != j)
{
indnext = j;
}}
for (int j = 0; j < indput; j++)
{
if (put[j] == indnext)
{
goto End;
}}}
End: Graphics grt = pictureBox1.CreateGraphics();
SolidBrush br = new SolidBrush(Color.Red);
Font f = new Font("Times New Roman", 14);
string strt = "т. " + indnext.ToString() + " т. двусвязанности";
grt.DrawString(strt, f, br, new Point(x, y));
y += 15;
string strok="";
for (int i = 0; i < indnext; i++)
{
if (mas[indnext, i] == 1)
{
strok += " " + i.ToString();
}}
strok =indnext+strok+" компонента двусвяз.";
strok.TrimStart();
grt.DrawString(strok, f, br, new Point(x, y));
y += 15;
strok="";
for (int i = indnext; i < (textBox1.Lines.Length - kol); i++)
{
if (mas[indnext, i] == 1)
{
strok +=" "+i.ToString();
}}
strok = indnext.ToString() + strok+" компонента двусвяз.";
grt.DrawString(strok, f, br, new Point(x, y));
}
private void menuItem5_Click(object sender, EventArgs e)
{
AboutBox ab = new AboutBox();
ab.ShowDialog();
}
private void menuItem3_Click(object sender, EventArgs e)
{
this.Close();
}}}

 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Не поможете ?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


ты думаешь, это реально прочитать?
вот такое нагромождение строк без отступов?
что-то у меня вообще сомнения, что это за язык...


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Michael_Rybak
*****

Группа: Пользователи
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

Репутация: -  32  +


Если расскажешь алгоритм, могу сказать, правильно или нет smile.gif

Цитата(мисс_граффити @ 5.12.2006 18:30) *

что-то у меня вообще сомнения, что это за язык...


Джава, ага
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Знаток
****

Группа: Пользователи
Сообщений: 419
Пол: Мужской

Репутация: -  6  +


это c#

program svyazniye_componenti;
const nVert = 100;
nAdj = 1000;

type TVert = array[1..nVert]of integer;
tAdj = array[1..nAdj]of integer;

var f : text;
n : integer;
adj : TAdj;
fst ,nbr ,vtx ,mark : TVert;
i ,j : integer;
yes : boolean;

procedure init(var yes : boolean);
var i ,j ,m : integer;
begin
for i := 1 to n do
for j := 1 to nbr[i] do
begin
yes := false;
for m := 1 to n do
if adj[fst[i] + j] = vtx[m] then
begin
yes := true;
adj[fst[i] + j] := m;
break;
end;
if not yes then exit;
end;
end;

procedure component(x ,count : integer);
var i ,v : integer;
begin
mark[x] := count;
for i := 1 to nbr[x] do
begin
v := adj[fst[x] + i];
if mark[v] = 0 then component(v,count);
end;
end;

procedure conn;
var v ,count : integer;
begin
for v := 1 to n do mark[v] := 0;
count := 0;
for v := 1 to n do
if mark[v] = 0 then
begin
count := count + 1;
component(v,count);
end
end;

begin
assign(f ,'sv_comp.in');reset(f);
read(f,n);
fst[1] := 0;
for i := 1 to n do
begin
read(f ,vtx[i]);
read(f ,nbr[i]);
for j := 1 to nbr[i] do
read(f ,adj[fst[i] + j]);
fst[i + 1] := fst[i] + nbr[i];
end;
close(f);
assign(f ,'sv_comp.out');rewrite(f);
init(yes);
if not yes then
begin
writeln(f ,'error');
close(f);
exit;
end;
conn;
for i := 1 to n do write(f ,vtx[i] : 3);writeln(f);
for i := 1 to n do write(f ,mark[i] : 3);
close(f);
end.
это не перевод твоего кода ,это я на винте нарыл.

с форматом входных данных разберешься?


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






virt, ну, если не трудно, объясни, пожалуйста, т.к. я с графами не очень дружу )
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Пожалуйста, надо уже срочно...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Michael_Rybak
*****

Группа: Пользователи
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

Репутация: -  32  +


Цитата(virt @ 5.12.2006 21:39) *

это c#


Ну с# так c# wub.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Ну подскажи немного... оч надо, пожалуйста
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Michael_Rybak
*****

Группа: Пользователи
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

Репутация: -  32  +


Цитата(virt @ 5.12.2006 21:39) *

program svyazniye_componenti;

это не перевод твоего кода ,это я на винте нарыл.

с форматом входных данных разберешься?


Я не сильно вчитывался, но мне кажется, что это - не то, что нужно ОП. Это выделение связных компонент. А нужно - двусвязной.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Гость






Горю!!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Michael_Rybak
*****

Группа: Пользователи
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

Репутация: -  32  +


В этом разделе решают вместе. Код, который ты кинула - во-первых, действительно страшненький, во-вторых, явно вырезан из проекта и сам по себе и близко не рабочий (хотя бы потому, что обработчики событий типа menuItem2_Click должны быть подписаны на эти события, и в коде я этого не вижу). А в третьих, ты его кинула, и сказала - "помогите". Если у тебя что-то не получается, но ты представляешь, как решать задачу - спроси, попробуем помочь. Если не представляешь - спроси, расскажем алгоритм. Если хочешь чтоб за тебя просто выполнили работу - тебе в раздел "Задачи на заказ".

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 28.03.2024 19:46
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name