Ready 1v
This commit is contained in:
parent
69ad981e94
commit
60380d5262
@ -19,10 +19,6 @@ namespace Cursach
|
|||||||
Draw();
|
Draw();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void buttonAddNode_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
private void buttonAddEdge_Click(object sender, EventArgs e)
|
private void buttonAddEdge_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (!_adjacencyList.AddBind(new Bind(
|
if (!_adjacencyList.AddBind(new Bind(
|
||||||
|
@ -1,14 +1,4 @@
|
|||||||
using System;
|
namespace Cursach
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel;
|
|
||||||
using System.Data;
|
|
||||||
using System.Drawing;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Windows.Forms;
|
|
||||||
|
|
||||||
namespace Cursach
|
|
||||||
{
|
{
|
||||||
public partial class InfoForm : Form
|
public partial class InfoForm : Form
|
||||||
{
|
{
|
||||||
|
@ -7,7 +7,7 @@ namespace Cursach
|
|||||||
public partial class MainForm : Form
|
public partial class MainForm : Form
|
||||||
{
|
{
|
||||||
private Visualizator? visualizator;
|
private Visualizator? visualizator;
|
||||||
private StatesManager? _storage;
|
private StatesStorage? _manager;
|
||||||
|
|
||||||
public MainForm()
|
public MainForm()
|
||||||
{
|
{
|
||||||
@ -28,13 +28,13 @@ namespace Cursach
|
|||||||
|
|
||||||
private void buttonNext_Click(object sender, EventArgs e)
|
private void buttonNext_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (_storage == null)
|
if (_manager == null)
|
||||||
{
|
{
|
||||||
MessageBox.Show("Сначала нужно создать граф");
|
MessageBox.Show("Сначала нужно создать граф");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_storage.NextState())
|
if (_manager.NextState())
|
||||||
{
|
{
|
||||||
UpdateVizualization();
|
UpdateVizualization();
|
||||||
}
|
}
|
||||||
@ -43,7 +43,7 @@ namespace Cursach
|
|||||||
StringBuilder stringBuilder = new StringBuilder();
|
StringBuilder stringBuilder = new StringBuilder();
|
||||||
stringBuilder.Append("Обход графа в ширину завершен\n");
|
stringBuilder.Append("Обход графа в ширину завершен\n");
|
||||||
stringBuilder.Append("Результат:\n");
|
stringBuilder.Append("Результат:\n");
|
||||||
foreach (var node in _storage.GetCurrentState().visited)
|
foreach (var node in _manager.GetCurrentState().visited)
|
||||||
{
|
{
|
||||||
stringBuilder.Append("- " + node + "\n");
|
stringBuilder.Append("- " + node + "\n");
|
||||||
}
|
}
|
||||||
@ -54,13 +54,13 @@ namespace Cursach
|
|||||||
|
|
||||||
private void buttonPrev_Click(object sender, EventArgs e)
|
private void buttonPrev_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (_storage == null)
|
if (_manager == null)
|
||||||
{
|
{
|
||||||
MessageBox.Show("Сначала нужно создать граф");
|
MessageBox.Show("Сначала нужно создать граф");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_storage.PrevState())
|
if (_manager.PrevState())
|
||||||
{
|
{
|
||||||
UpdateVizualization();
|
UpdateVizualization();
|
||||||
}
|
}
|
||||||
@ -79,27 +79,27 @@ namespace Cursach
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_storage = new Manager(paramter).StartBFS();
|
_manager = new Manager(paramter).StartBFS();
|
||||||
MessageBox.Show("Обход графа в ширину запущен");
|
MessageBox.Show("Обход графа в ширину запущен");
|
||||||
UpdateVizualization();
|
UpdateVizualization();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Draw()
|
private void Draw()
|
||||||
{
|
{
|
||||||
if (visualizator == null || _storage == null || _storage.GetCurrentState() == null)
|
if (visualizator == null || _manager == null || _manager.GetCurrentState() == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Bitmap bmp = new(pictureBox1.Width, pictureBox1.Height);
|
Bitmap bmp = new(pictureBox1.Width, pictureBox1.Height);
|
||||||
Graphics gr = Graphics.FromImage(bmp);
|
Graphics gr = Graphics.FromImage(bmp);
|
||||||
visualizator.Draw(gr, _storage.GetCurrentState());
|
visualizator.Draw(gr, _manager.GetCurrentState());
|
||||||
pictureBox1.Image = bmp;
|
pictureBox1.Image = bmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SaveToolStripMenuItem1_Click(object sender, EventArgs e)
|
private void SaveToolStripMenuItem1_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (_storage == null)
|
if (_manager == null)
|
||||||
{
|
{
|
||||||
MessageBox.Show("Сначала нужно создать граф");
|
MessageBox.Show("Сначала нужно создать граф");
|
||||||
return;
|
return;
|
||||||
@ -107,7 +107,7 @@ namespace Cursach
|
|||||||
|
|
||||||
if (saveFileDialog.ShowDialog() == DialogResult.OK)
|
if (saveFileDialog.ShowDialog() == DialogResult.OK)
|
||||||
{
|
{
|
||||||
MessageBox.Show(_storage.SaveStateList(saveFileDialog.FileName)
|
MessageBox.Show(_manager.SaveStateList(saveFileDialog.FileName)
|
||||||
? $"Список состояний успешно сохранён в {saveFileDialog.FileName}"
|
? $"Список состояний успешно сохранён в {saveFileDialog.FileName}"
|
||||||
: $"Ошибка при сохранении файла {saveFileDialog.FileName}");
|
: $"Ошибка при сохранении файла {saveFileDialog.FileName}");
|
||||||
}
|
}
|
||||||
@ -115,12 +115,12 @@ namespace Cursach
|
|||||||
|
|
||||||
private void LoadToolStripMenuItem_Click(object sender, EventArgs e)
|
private void LoadToolStripMenuItem_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
_storage ??= new StatesManager();
|
_manager ??= new StatesStorage();
|
||||||
|
|
||||||
if (openFileDialog.ShowDialog() == DialogResult.OK)
|
if (openFileDialog.ShowDialog() == DialogResult.OK)
|
||||||
{
|
{
|
||||||
string filePath = openFileDialog.FileName;
|
string filePath = openFileDialog.FileName;
|
||||||
if (_storage.LoadStateList(filePath))
|
if (_manager.LoadStateList(filePath))
|
||||||
{
|
{
|
||||||
UpdateVizualization();
|
UpdateVizualization();
|
||||||
MessageBox.Show("Файл загружен успешно");
|
MessageBox.Show("Файл загружен успешно");
|
||||||
@ -140,18 +140,18 @@ namespace Cursach
|
|||||||
|
|
||||||
private void UpdateVizualization()
|
private void UpdateVizualization()
|
||||||
{
|
{
|
||||||
startPointLabel.Text = "Отсчёт от: " + _storage.GetStartNode();
|
startPointLabel.Text = "Отсчёт от: " + _manager.GetStartNode();
|
||||||
progressBar1.Maximum = _storage.Count;
|
progressBar1.Maximum = _manager.Count;
|
||||||
progressBar1.Value = _storage.CurrentStateIndex + 1;
|
progressBar1.Value = _manager.CurrentStateIndex + 1;
|
||||||
|
|
||||||
listBox1.Items.Clear();
|
listBox1.Items.Clear();
|
||||||
foreach (var node in _storage.GetCurrentState().queue)
|
foreach (var node in _manager.GetCurrentState().queue)
|
||||||
{
|
{
|
||||||
listBox1.Items.Add(node.ToString());
|
listBox1.Items.Add(node.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
listBox2.Items.Clear();
|
listBox2.Items.Clear();
|
||||||
foreach (var node in _storage.GetCurrentState().visited)
|
foreach (var node in _manager.GetCurrentState().visited)
|
||||||
{
|
{
|
||||||
listBox2.Items.Add(node.ToString());
|
listBox2.Items.Add(node.ToString());
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
using System.Reflection.Metadata;
|
using Cursach.Parameters;
|
||||||
using Cursach.Parameters;
|
|
||||||
using Cursach.Realisations;
|
using Cursach.Realisations;
|
||||||
using Cursach.States;
|
using Cursach.States;
|
||||||
|
|
||||||
@ -7,16 +6,16 @@ namespace Cursach;
|
|||||||
|
|
||||||
public class Manager(BFSParameters parameter)
|
public class Manager(BFSParameters parameter)
|
||||||
{
|
{
|
||||||
public BFS BFS = new(parameter);
|
private BFS BFS = new(parameter);
|
||||||
|
|
||||||
public StatesManager StartBFS()
|
public StatesStorage StartBFS()
|
||||||
{
|
{
|
||||||
StatesManager statesManager = new();
|
StatesStorage statesStorage = new();
|
||||||
statesManager.AddState(BFS.GetState());
|
statesStorage.AddState(BFS.GetState());
|
||||||
while (BFS.Step())
|
while (BFS.Step())
|
||||||
{
|
{
|
||||||
statesManager.AddState(BFS.GetState());
|
statesStorage.AddState(BFS.GetState());
|
||||||
}
|
}
|
||||||
return statesManager;
|
return statesStorage;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,5 +1,4 @@
|
|||||||
using System.Reflection.Metadata;
|
using Cursach.Parameters;
|
||||||
using Cursach.Parameters;
|
|
||||||
using Cursach.States;
|
using Cursach.States;
|
||||||
|
|
||||||
namespace Cursach.Realisations;
|
namespace Cursach.Realisations;
|
||||||
@ -7,7 +6,6 @@ namespace Cursach.Realisations;
|
|||||||
public class BFS
|
public class BFS
|
||||||
{
|
{
|
||||||
public Node StartNode { private set; get; }
|
public Node StartNode { private set; get; }
|
||||||
public bool IsEnd { private set; get; }
|
|
||||||
private AdjacencyList adjacencyList;
|
private AdjacencyList adjacencyList;
|
||||||
private bool isCompleted = false;
|
private bool isCompleted = false;
|
||||||
|
|
||||||
@ -21,13 +19,13 @@ public class BFS
|
|||||||
visited = new();
|
visited = new();
|
||||||
queue = new();
|
queue = new();
|
||||||
queue.Enqueue(StartNode);
|
queue.Enqueue(StartNode);
|
||||||
IsEnd = false;
|
|
||||||
isCompleted = false;
|
isCompleted = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public State GetState()
|
public State GetState()
|
||||||
{
|
{
|
||||||
return new State(adjacencyList, new List<Node>(visited), new List<Node>(queue));
|
return new State(adjacencyList, new List<Node>(visited), new List<Node>(queue));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetState(State state)
|
public void SetState(State state)
|
||||||
@ -36,6 +34,7 @@ public class BFS
|
|||||||
adjacencyList = state.AdjacencyList;
|
adjacencyList = state.AdjacencyList;
|
||||||
visited = state.visited;
|
visited = state.visited;
|
||||||
queue = new Queue<Node>(state.queue);
|
queue = new Queue<Node>(state.queue);
|
||||||
|
isCompleted = queue.Count == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Step()
|
public bool Step()
|
||||||
|
@ -1,9 +1,4 @@
|
|||||||
using Cursach.Realisations;
|
using Cursach.Realisations;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using ProtoBuf;
|
using ProtoBuf;
|
||||||
|
|
||||||
namespace Cursach.States;
|
namespace Cursach.States;
|
||||||
@ -15,8 +10,6 @@ public class State()
|
|||||||
[ProtoMember(1)] public List<Node> visited = [];
|
[ProtoMember(1)] public List<Node> visited = [];
|
||||||
[ProtoMember(2)] public List<Node> queue = [];
|
[ProtoMember(2)] public List<Node> queue = [];
|
||||||
[ProtoMember(3)] public AdjacencyList AdjacencyList = new();
|
[ProtoMember(3)] public AdjacencyList AdjacencyList = new();
|
||||||
public bool IsCompleted => !queue.Any();
|
|
||||||
|
|
||||||
public State(AdjacencyList adjacencyList, List<Node> visited, List<Node> queue) : this()
|
public State(AdjacencyList adjacencyList, List<Node> visited, List<Node> queue) : this()
|
||||||
{
|
{
|
||||||
this.visited = visited;
|
this.visited = visited;
|
||||||
|
@ -1,26 +1,13 @@
|
|||||||
using Cursach.Realisations;
|
using Cursach.Realisations;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.Design;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Windows.Forms;
|
|
||||||
using ProtoBuf;
|
using ProtoBuf;
|
||||||
|
|
||||||
namespace Cursach.States;
|
namespace Cursach.States;
|
||||||
|
|
||||||
public class StatesManager
|
public class StatesStorage
|
||||||
{
|
{
|
||||||
List<State> states;
|
List<State> states = [];
|
||||||
public int Count => states.Count;
|
public int Count => states.Count;
|
||||||
public int CurrentStateIndex { get; private set; }
|
public int CurrentStateIndex { get; private set; } = 0;
|
||||||
|
|
||||||
public StatesManager()
|
|
||||||
{
|
|
||||||
states = [];
|
|
||||||
CurrentStateIndex = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool NextState()
|
public bool NextState()
|
||||||
{
|
{
|
||||||
@ -68,9 +55,18 @@ public class StatesManager
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public State? GoToFirstState()
|
||||||
|
{
|
||||||
|
if (states.Count != 0)
|
||||||
|
{
|
||||||
|
CurrentStateIndex = 0;
|
||||||
|
return states[0];
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
public State? GetFirstState()
|
public State? GetFirstState()
|
||||||
{
|
{
|
||||||
if (states.Count == 0)
|
if (states.Count != 0)
|
||||||
{
|
{
|
||||||
return states[0];
|
return states[0];
|
||||||
}
|
}
|
||||||
@ -80,7 +76,7 @@ public class StatesManager
|
|||||||
|
|
||||||
public State? GetLastState()
|
public State? GetLastState()
|
||||||
{
|
{
|
||||||
if (states.Count == 0)
|
if (states.Count != 0)
|
||||||
{
|
{
|
||||||
return states[Count - 1];
|
return states[Count - 1];
|
||||||
}
|
}
|
@ -3,15 +3,12 @@ using Cursach.States;
|
|||||||
|
|
||||||
namespace Cursach;
|
namespace Cursach;
|
||||||
|
|
||||||
|
// Can do this class static
|
||||||
public class Visualizator
|
public class Visualizator
|
||||||
{
|
{
|
||||||
private State? State { get; set; }
|
|
||||||
|
|
||||||
public void Draw(Graphics g, State state)
|
public void Draw(Graphics g, State state)
|
||||||
{
|
{
|
||||||
Pen penLine = new(Color.Black, 5);
|
Pen penLine = new(Color.Black, 5);
|
||||||
Pen penBid = new(Color.Red, 2);
|
|
||||||
Pen penSelectedBid = new(Color.Green, 3);
|
|
||||||
Brush darkBrush = new SolidBrush(Color.Black);
|
Brush darkBrush = new SolidBrush(Color.Black);
|
||||||
g.FillRectangle(new SolidBrush(Color.White), 0, 0, 500, 500);
|
g.FillRectangle(new SolidBrush(Color.White), 0, 0, 500, 500);
|
||||||
|
|
||||||
|
BIN
Cursach/data/4ver.states
Normal file
BIN
Cursach/data/4ver.states
Normal file
Binary file not shown.
221
Cursach/data/6ver.states
Normal file
221
Cursach/data/6ver.states
Normal file
@ -0,0 +1,221 @@
|
|||||||
|
|
||||||
|
<EFBFBD>
|
||||||
|
<08><10><1A>
|
||||||
|
|
||||||
|
cd
|
||||||
|
<08><10> <08>`
|
||||||
|
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
<08><10>cd
|
||||||
|
|
||||||
|
<08>`
|
||||||
|
<08><10>cd
|
||||||
|
/
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
<08><10>
|
||||||
|
<08><10> <08>`
|
||||||
|
$
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
<08><10>
|
||||||
|
<08><10>
|
||||||
|
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
<08><10>
|
||||||
|
<EFBFBD>
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
<08><10>
|
||||||
|
<08><10> <08>`<1A>
|
||||||
|
|
||||||
|
cd
|
||||||
|
<08><10> <08>`
|
||||||
|
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
<08><10>cd
|
||||||
|
|
||||||
|
<08>`
|
||||||
|
<08><10>cd
|
||||||
|
/
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
<08><10>
|
||||||
|
<08><10> <08>`
|
||||||
|
$
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
<08><10>
|
||||||
|
<08><10>
|
||||||
|
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
<08><10>
|
||||||
|
<EFBFBD>
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
<08><10> <08>`
|
||||||
|
<08><10><1A>
|
||||||
|
|
||||||
|
cd
|
||||||
|
<08><10> <08>`
|
||||||
|
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
<08><10>cd
|
||||||
|
|
||||||
|
<08>`
|
||||||
|
<08><10>cd
|
||||||
|
/
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
<08><10>
|
||||||
|
<08><10> <08>`
|
||||||
|
$
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
<08><10>
|
||||||
|
<08><10>
|
||||||
|
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
<08><10>
|
||||||
|
<EFBFBD>
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
|
||||||
|
<08><10> <08>`
|
||||||
|
<08><10>cd<1A>
|
||||||
|
|
||||||
|
cd
|
||||||
|
<08><10> <08>`
|
||||||
|
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
<08><10>cd
|
||||||
|
|
||||||
|
<08>`
|
||||||
|
<08><10>cd
|
||||||
|
/
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
<08><10>
|
||||||
|
<08><10> <08>`
|
||||||
|
$
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
<08><10>
|
||||||
|
<08><10>
|
||||||
|
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
<08><10>
|
||||||
|
<EFBFBD>
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
<08>`
|
||||||
|
<08><10>cd<1A>
|
||||||
|
|
||||||
|
cd
|
||||||
|
<08><10> <08>`
|
||||||
|
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
<08><10>cd
|
||||||
|
|
||||||
|
<08>`
|
||||||
|
<08><10>cd
|
||||||
|
/
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
<08><10>
|
||||||
|
<08><10> <08>`
|
||||||
|
$
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
<08><10>
|
||||||
|
<08><10>
|
||||||
|
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
<08><10>
|
||||||
|
<EFBFBD>
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
<08>`
|
||||||
|
|
||||||
|
<08><10>cd<1A>
|
||||||
|
|
||||||
|
cd
|
||||||
|
<08><10> <08>`
|
||||||
|
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
<08><10>cd
|
||||||
|
|
||||||
|
<08>`
|
||||||
|
<08><10>cd
|
||||||
|
/
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
<08><10>
|
||||||
|
<08><10> <08>`
|
||||||
|
$
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
<08><10>
|
||||||
|
<08><10>
|
||||||
|
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
<08><10>
|
||||||
|
<EFBFBD>
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
<08>`
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
cd<1A>
|
||||||
|
|
||||||
|
cd
|
||||||
|
<08><10> <08>`
|
||||||
|
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
<08><10>cd
|
||||||
|
|
||||||
|
<08>`
|
||||||
|
<08><10>cd
|
||||||
|
/
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
<08><10>
|
||||||
|
<08><10> <08>`
|
||||||
|
$
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
<08><10>
|
||||||
|
<08><10>
|
||||||
|
|
||||||
|
|
||||||
|
<08><10>
|
||||||
|
<08><10>
|
Loading…
Reference in New Issue
Block a user