Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2011, 22:47   #11
Alina_Honey
Пользователь
 
Регистрация: 14.12.2010
Сообщений: 23
По умолчанию

А почему step=1??
fun(ms,l,1,sq);
Alina_Honey вне форума Ответить с цитированием
Старый 09.05.2011, 22:55   #12
Alina_Honey
Пользователь
 
Регистрация: 14.12.2010
Сообщений: 23
По умолчанию

Вообщим вот что получилось, но не работает, я немного не понимаю почему step=1, но в остальном вроде все так. Компилятор ошибок не выдаёт. Но дебуг тоже ничего не выдаёт...
Код:
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include <stdlib.h>
void fun(int ms[5][5], int pos, int step, int sq[9]) 
{ 
 int flag=0;
   for(int i=0;i<5;i++)
      if(ms[pos][i]){
           pos=ms[pos][i]; 
           sq[step]=pos;
           if(step>1){
           for(int k=0;k<step-1;k++){ 
                if((sq[i]== pos && sq[i+1]==sq[step]) || (sq[i+1]== pos && sq[i]==sq[step])) 
				{flag=1; break;}
           if (step==8 && flag==0){ 
               for(int i=0;i<9;i++)
                    printf("%d",sq[i]+1);
		   }
		   }
	  }
	  }
		   if(flag==0 && step<8) 
			   { fun(ms,pos,step++,sq); 
           
      }
}


int main()
{
	int ms[5][5]={0,1,0,0,1,1,0,1,1,1,0,1,0,1,1,0,1,1,0,1,1,1,1,1,0},pos,step,sq[9]={0,0,0,0,0,0,0,0,0};
/*int i,j;
{
	for (i=0; i<5; i++)
		for(j=0; j<5; j++)
		printf("%d               ",ms[i][j]);
}*/
getch();
return 0;

for(int l=0;l<5;l++){ 
        sq[0]=l;
         fun(ms,l,1,sq);}
}
Alina_Honey вне форума Ответить с цитированием
Старый 12.05.2011, 20:29   #13
Alina_Honey
Пользователь
 
Регистрация: 14.12.2010
Сообщений: 23
По умолчанию

Пожалуиста, помогите еще раз...(
Alina_Honey вне форума Ответить с цитированием
Старый 13.05.2011, 16:00   #14
Alina_Honey
Пользователь
 
Регистрация: 14.12.2010
Сообщений: 23
По умолчанию

Я нашла свою ошибку(и не одну) но все же программа не работает, помогите разобраться в чем дело((( D
c++ unhandled exception in failik.exe: 0xC00000FD: Stack Overflow
Код:
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include <stdlib.h>
void fun(int ms[5][5], int pos, int step, int sq[9]) 
{ 
 int flag=0;
   for(int i=0;i<5;i++)
      if(ms[pos][i]==1){
           pos=i; // åñëè âîçìîæíî èäòè äàëüøå â pos çàíîñèì íîâóþ ïîçèöèþ.
           sq[step]=pos;
           if(step>1){
           for(int k=0;k<step-1;k++){ // ïðîâåðêà íà ïðîõîæäåíèå ðåáåð âòîðîé ðàç
                if((sq[i]== pos && sq[i+1]==sq[step]) || (sq[i+1]== pos && sq[i]==sq[step])) 
				{flag=1; break;}
           if (step==8 && flag==0){ 
               for(int i=0;i<9;i++)
                    printf("%d",sq[i]+1);// +1 ÷òî îáîçíà÷åíèÿ áûëè îò 1 äî 5
		   }
		   }
	  }
	  }
		   if(flag==0 && step<8) 
			   { fun(ms,pos,step++,sq); // åñëè ôëàã 0 òî èäåì äàëüøå
           
      }
}


int main()
{
	int ms[5][5]={0,1,0,0,1,1,0,1,1,1,0,1,0,1,1,0,1,1,0,1,1,1,1,1,0},sq[9]={0,0,0,0,0,0,0,0,0};

for(int l=0;l<5;l++){ // îïðåäåëÿåì èñõîäíóþ òî÷êó
        sq[0]=1;
         fun(ms,l,1,sq);}
getch();
return 0;
}
Alina_Honey вне форума Ответить с цитированием
Старый 14.05.2011, 15:18   #15
ololo-schoolboy
Форумчанин
 
Регистрация: 25.12.2010
Сообщений: 247
По умолчанию

Это решается с помощью поиска в глубину

Код:
#include<iostream>

using namespace std;

const int SIZE=5;
const int edges_N=9;

void dfs(int v, bool matrix[][SIZE], bool used[][SIZE], int *list, int index);

int main()
{

	bool matrix[SIZE][SIZE]={
	{0,1,1,0,1},
	{1,0,1,0,1},
	{1,1,0,1,1},
	{0,0,1,0,1},
	{1,1,1,1,0}};
	bool used[SIZE][SIZE];
	int list[edges_N];
	memset(used, 0, SIZE*SIZE*sizeof(bool));
	memset(list, 0, edges_N*sizeof(int));
	dfs(0, matrix, used, list, 0);
	cin.get();
	return 0;
}

void dfs(int v, bool matrix[][SIZE], bool used[][SIZE], int *list, int index)
{
	list[index]=v+1;
	if(index<edges_N-1)
	{
		for (int i=0; i<SIZE; ++i)
		{
			if(matrix[v][i] && !used[v][i] && !used[i][v])
			{
				used[v][i]=true;
				used[i][v]=true;
				dfs(i, matrix, used, list, index+1);
				used[v][i]=false;
				used[i][v]=false;
			}
		}
	}
	else
	{
		for(int i=0;i<edges_N;++i)
			cout<<list[i];
		cout<<endl;
	}
	list[index]=0;
}
ololo-schoolboy вне форума Ответить с цитированием
Старый 14.05.2011, 19:52   #16
Alina_Honey
Пользователь
 
Регистрация: 14.12.2010
Сообщений: 23
По умолчанию

Спасибо)
Alina_Honey вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Basic. Нарисовать домик. Работа с файлом BopCuHka Помощь студентам 1 18.05.2010 23:09