Transformer un code sur la console en C++ en Qt
bonjour à tous
j'ai un code en c++ et je veux le refaire en Qt
aviez vous une idée qui me facilite la tâche?
voilà mon code
fichier main
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
#include <iostream>
#include "graph.h"
#include <iostream>
#include <ctime>
#include <malloc.h>
#include<stdlib.h>
using namespace std;
#include"queue.h"
#include"prims_kruskal.h"
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char** argv)
{
int choix,taille,nb_arc,a,b;
int i=1;
cout<<"*** graphe non value tapez 1 ***"<<endl<<"*** graphe value tapez 2 ***"<<endl;
cin>>choix ;
if (choix==1)
{
cout<<"entrez la taille du graphe"<<endl;
cin>>taille;
Graph g(taille);
cout<<"entrez le nombre d'arcs"<<endl;
cin>>nb_arc;
while( i!=nb_arc+1)
{
if(i==1)
cout<<"pour le 1 er arc"<<endl;
else
cout<<"pour le "<<i<<" eme arc"<<endl;
cout<<" entrez le sommet de depart ";
cin>>a;
cout<<"entrez le sommet d'arrivee ";
cin>>b;
g.addEdge(a,b) ;
i++;
}
cout<<"*** voulez vous appliquer quel parcours sur votre graphe? ***"<<endl<<"*** parcours en profondeur tapez 1 ***"<<endl<<"*** parcours en largeur tapez 2 ***"<<endl<<"*** les deux parcours tapez 3 ***"<<endl; ;
cin>>choix;
if(choix==1)
{
cout<<"entrez le sommet racine "<<endl;
cin>>a;
cout<<"entrez le sommet d'arret "<<endl;
cin>>b;
g.DFS(a,b);
}
else if(choix==2)
{
cout<<"entrez le sommet racine "<<endl;
cin>>a;
cout<<"entrez le sommet d'arrivee "<<endl;
cin>>b;
g.BFS(a,b);
}
else if(choix==3)
{
cout<<"entrez le sommet racine "<<endl;
cin>>a;
cout<<"entrez le sommet d'arrivee "<<endl;
cin>>b;
g.BFS(a,b);
g.DFS(a,b);
}
else
{
cout<<"choix non valide"<<endl;
}
}
//valorise
else if(choix==2)
{
cout<<"*** plus court chemin tapez 1 ***"<<endl<<"*** arbre recouvrant a poids minimum tapez 2 ***"<<endl<<"*** flot maximum tapez 3 ***"<<endl;
cin>>choix;
if(choix==1)
{
cout<<"pas encore"<<endl;//pcc
}
else if (choix==2)
{
cout<<"*** quel algorithme voulez-vous appliquer sur votre graphe? ***"<<endl<<"*** PRIM tapez 1 ***"<<endl<<"*** KRUSKAL tapez 2 ***"<<endl<<"*** steiner tapez 3 ***"<<endl;
cin>>choix;
if(choix==1)
{
prims_kruskal g;
g.createGraph();
g.prim();
}
else if(choix==2)
{
prims_kruskal g;
g.createGraph();
g.kruskal();
//kruskal
}
else if(choix==3)
{
cout<<"*** pas encore ***"<<endl;//steiner
}
else
{
cout<<"*** choix non valide ***"<<endl;
}
}
else if (choix==3){
//flot max
cout<<"*** pas encore ***"<<endl;
}
else {
}
}
//fin de valorisee
else
{
cout<<"choix non valide"<<endl;
}
/* Graph g(12);
g.addEdge(1, 2); g.addEdge(1, 3);
g.addEdge(2, 4); g.addEdge(3, 4);
g.addEdge(3, 6); g.addEdge(4 ,7);
g.addEdge(5, 6); g.addEdge(5, 7);
//clock_t t1;
// t1 = clock();
g.BFS(1, 15);
//float diff = (double)(clock() - t1)/CLOCKS_PER_SEC ;
//cout <<endl<< "The time taken for Breadth first search: "<< diff << endl;
g.DFS(1,15); */
return 0;
} |
fichier queue.h
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
#include "graph.h"
#include <iostream>
#include <ctime>
#include <malloc.h>
#include<stdlib.h>
using namespace std;
#include"queue.h"
#include <iostream>
#include <ctime>
#include <malloc.h>
#include<stdlib.h>
using namespace std;
struct node {
int info;
node *next;
};
class Queue {
private:
node *front;
node *rear;
public:
Queue();
~Queue();
bool isEmpty();
void enqueue(int);
int dequeue();
void display();
};
class stack
{ struct node *top;
public:
stack();
void push(int);
int pop();
bool isEmpty();
void display();
}; |
fichier queue.cpp
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
|
#include "queue.h"
void Queue::display(){
node *p = new node;
p = front;
if(front == NULL){
cout<<"nNothing to Displayn";
}else{
while(p!=NULL){
cout<<endl<<p->info;
p = p->next;
}
}
}
Queue::Queue() {
front = NULL;
rear = NULL;
}
Queue::~Queue() {
delete front;
}
void Queue::enqueue(int data) {
node *temp = new node();
temp->info = data;
temp->next = NULL;
if(front == NULL){
front = temp;
}else{
rear->next = temp;
}
rear = temp;
}
int Queue::dequeue() {
node *temp = new node();
int value;
if(front == NULL){
cout<<"nQueue is Emtptyn";
}else{
temp = front;
value = temp->info;
front = front->next;
delete temp;
}
return value;
}
bool Queue::isEmpty() {
return (front == NULL);
}
stack::stack(){
top = NULL;
}
void stack::push(int data){
node *p;
if((p=(node*)malloc(sizeof(node)))==NULL){
cout<<"Memory Exhausted";
exit(0);
}
p = new node;
p->info = data;
p->next = NULL;
if(top!=NULL){
p->next = top;
}
top = p;
}
int stack::pop(){
struct node *temp;
int value;
if(top==NULL){
cout<<"\nThe stack is Empty"<<endl;
}else{
temp = top;
top = top->next;
value = temp->info;
delete temp;
}
return value;
}
bool stack::isEmpty(){
return (top == NULL);
}
void stack::display(){
struct node *p = top;
if(top==NULL){
cout<<"\nNothing to Display\n";
}else{
cout<<"\nThe contents of Stack\n";
while(p!=NULL){
cout<<p->info<<endl;
p = p->next;
}
}
} |
fichier graph.h
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| #include "graph.h"
#include <iostream>
#include <ctime>
#include <malloc.h>
#include<stdlib.h>
using namespace std;
#include"queue.h"
class Graph {
private:
int n;
int **A;
public:
Graph(int size = 2);
~Graph();
bool isConnected(int, int);
void addEdge(int x, int y);
void BFS(int , int);
void DFS(int , int);
}; |
fichier graph.cpp
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
#include "graph.h"
Graph::Graph(int size) {
int i, j;
if (size < 2) n = 2;
else n = size;
A = new int*[n];
for (i = 0; i < n; ++i)
A[i] = new int[n];
for (i = 0; i < n; ++i)
for (j = 0; j < n; ++j)
A[i][j] = 0;
}
Graph::~Graph() {
for (int i = 0; i < n; ++i)
delete [] A[i];
delete [] A;
}
bool Graph::isConnected(int x, int y) {
return (A[x-1][y-1] == 1);// diff de 0
}
void Graph::addEdge(int x, int y) {
A[x-1][y-1] = A[y-1][x-1] = 1;
}
void Graph::BFS(int x, int required) {
Queue Q;
bool *visited = new bool[n+1];
int i;
for (i = 1; i <= n; ++i)
visited[i] = false;
Q.enqueue(x);
if(x == required) return;
visited[x] = true;
cout << "Breadth first Search starting from vertex ";
cout << x << " : " << endl;
while (!Q.isEmpty()) {
int k = Q.dequeue();
if(k == required){
cout<<" FOUND HERE ";
continue;
}
cout << k << " ";
for (i = 1; i <= n; ++i)
if (isConnected(k, i) && !visited[i]) {
Q.enqueue(i);
visited[i] = true;
}
}
cout << endl;
delete [] visited;
}
void Graph::DFS(int x, int required){
stack s;
bool *visited = new bool[n+1];
int i;
for(i = 0; i <= n; i++)
visited[i] = false;
s.push(x);
visited[x] = true;
if(x == required) return;
cout << "Depth first Search starting from vertex ";
cout << x << " : " << endl;
while(!s.isEmpty()){
int k = s.pop();
if(k == required) break;
cout<<k<<" ";
for (i = n; i >= 0 ; --i)
if (isConnected(k, i) && !visited[i]) {
s.push(i);
visited[i] = true;
}
}
cout<<endl;
delete [] visited;
} |
fichier prims_kruskal.h
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include<stdio.h>
#include<stdlib.h>
using namespace std;
class prims_kruskal
{
int graph[20][20],nodes;
public:
prims_kruskal();
void createGraph();
void prim();
void kruskal();
}; |
fichier prims_kruskal.cpp
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
| #include "prims_kruskal.h"
#include<iostream>
#define infinity 5343636
using namespace std;
prims_kruskal :: prims_kruskal(){
for(int i=0;i < 20;i++)
for(int j=0;j < 20;j++)
graph[i][j]=0;
}
void prims_kruskal :: createGraph(){
int i,j,m,c,a,b;
j=1;
cout << "Entez le nombre total des noeuds : ";
cin >> nodes;
cout << "\n\nEntez la matrice d'adjacence : \n";
for(i=0;i < nodes;i++)
for(j=0;j < nodes;j++)
cin >> graph[i][j];
//cout<<"entrez le nombre des arcs : " ;
//cin>>m;
//cout << "\n\nEntez la matrice d'adjacence : \n";
//for(i=0;i < nodes;i++)
//{
/*while(j<=m)
{
if(j==1)
cout<<"pour le 1 er arc : "<<endl;
else
cout<<"pour le "<<j<<" eme arc : "<<endl;
cout<<"entrez le sommet de depart"<<endl;
cin>>a;
cout<<"entrez le sommet d'arrivee"<<endl;
cin>>b;
cout<<"entrez le cout"<<endl;
cin>>c;
j++;
//}*/
//graph[a-1][b-1]=graph[b-1][a-1]=c;
//Assign infinity to all graph[i][j] where weight is 0.
for(i=0;i < nodes;i++){
for(j=0;j < nodes;j++){
if(graph[i][j]==0)
graph[i][j]=infinity;
}
}
}
void prims_kruskal :: prim(){
cout<<"*** arbre couvrant par l'algorithme de prim : ***" ;
int selected[20];
int i,j,ne; //ne for no. of edges
int fals=0;
int tru=1;
int min,x,y;
for(i=0;i < nodes;i++)
selected[i]=fals;
selected[0]=tru; ne=0;
while(ne < nodes-1){
min=infinity;
for(i=0;i < nodes;i++)
{
if(selected[i]==tru){
for(j=0;j < nodes;j++){
if(selected[j]==fals){
if(min > graph[i][j])
{
min=graph[i][j];
x=i;
y=j;
}
}
}
}
}
selected[y]=true;
cout<<"\narc de " << x+1 << " --> " << y+1;
ne=ne+1;
}
}
void prims_kruskal::kruskal()
{
cout<<"\n*** arbre couvrant par l'algorithme de kruskal : ***" ;
int i,j,k,visit,visited[10],l,v,count,count1,vst,p,dup1,dup2;
visit=1;
while(visit<nodes)
{
v=infinity;
for(i=0;i<nodes;i++)
for(j=0;j<nodes;j++)
if(graph[i][j]!=infinity && graph[i][j]<v && graph[i][j]!=-1 )
{
int count =0;
for(p=0;p<nodes;p++)
{
if(visited[p]==i || visited[p]==j)
count++;
}
if(count >= 2)
{
for(p=1;p<=nodes;p++)
if(graph[i][p]!=infinity && p!=j)
dup1=p;
for(p=1;p<=nodes;p++)
if(graph[j][p]!=infinity && p!=i)
dup2=p;
if(graph[dup1][dup2]==-1)
continue;
}
l=i;
k=j;
v=graph[i][j];
}
cout <<"\narc de " <<l+1 <<"-->"<<k+1;
graph[l][k]=-1;
graph[k][l]=-1;
visit++;
int count=0;
count1=0;
for(i=1;i<=nodes;i++)
{
if(visited[i]==l)
count++;
if(visited[i]==k)
count1++;
}
if(count==0)
visited[++vst]=l;
if(count1==0)
visited[++vst]=k;
}
} |
aidez-moi SVP et merci d'avance ;)