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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.01.2011, 17:42   #1
_Ann_
Новичок
Джуниор
 
Регистрация: 20.01.2011
Сообщений: 1
По умолчанию задача на обход графа (с++)

в общем у меня задача - определить исход игры.
дан ориентированный граф, вершины которого являются позициями в следующей игре. Участвуют 2 игрока Аня и Ваня, например. они двигают фишку из позиции в позицию по дугам графа. Мн-во позиций разделено на 2 непересекающихся мн-ва А и В. в позициях А ход делает Аня, а позициях В - Ваня. Игра начинается в некоторой позиции. Аня выигрывает, если фишка оказалась в определенной позиции t, если же за любое кол-во ходов фишка не попадает в эту позицию, то выигрывает Ваня.

Требуется определить, какой игрок выигрывает в зависимости от стартовой позиции при оптимальной стратегии обеих сторон.

формат входного файла ( чтоб было понятней на примере):
7 //число вершин
12 //кол-во дуг
7 //заключительная позиция, как раз куда надо попасть Ане
0 1 0 0 0 1 0 //перечисление областей для точек, ну те первая точка в области Вани, так же и третья, четвертая, 5 и 7. У Ани соотв 2 и 6 точка
//дальше идут перечисления дуг и их направление
1 2 1 4 1 3
2 4 2 5
3 1 3 6 3 7
4 3 4 6
5 6
6 7

результат необходимо представить в файле, в котором записать последовательность с перечислением выигрышных и невыигрышных для Ани вершин
для этого примера - 0 1 0 0 1 1 1

вооот..
я делаю обход в глубину по матрице смежности, и по крайней мере пытаюсь проверять не для каждой точки, а наоборот, выходя из конечной..и еще пытаюсь находить циклы, ведь если он есть и он у Вани, то Аня в этих вершинах точно не выиграет..

Код:
int n, k, f;
bool a[10][10]; //матрица смежности
bool was[10]; //массив "посещения" вершины
bool b[10]; //массив областей
bool otv[10]; //результат
void dfs(int m);
int main()
{
    int i, j, x, y, z;
    freopen("in.txt", "rt", stdin); 
	freopen("out.txt", "wt", stdout);
    scanf("%d", &n);
    scanf("%d", &k);
	scanf("%d", &f);
	memset(was, false, sizeof(was));
	memset(otv, false, sizeof(otv));
	memset(b, false, sizeof(b));
	for (i = 1; i <= n; i++){ //заполнение массива
		cin>>z;
		if (z == 1)
			b[i] = true;
	}
    while(scanf("%d", &x)!= EOF) //заполнение матрицы смежности
    {
		cin>>y;
		a[y][x]=true;
    }	
	dfs(f);
	cout<<endl;
	for (i = 1; i <= n; i++)
		cout<<otv[i];
}

void dfs(int m)
{
	was[m] = true; //отмечаем вершину что уже пройдена
	int j;
	if(was[m] || !b[m]){ // если мы тут были или попали в область Вани, что равнозначно
		otv[m] = false;
	}
	if (b[m]) /// если мы попали в область Ани
		otv[m] = true;
	for(j=1;j<=n;j++)
	{
			dfs(j);
	}
	return;
}
в общем, посморите плиз, кому не трудно, может есть замечания или какие-то идеи, ибо это не работает
_Ann_ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обход графа Cpluser Общие вопросы .NET 3 06.04.2010 20:19
обход графа в ширину! КсенияСергеевна Общие вопросы C/C++ 0 12.12.2009 23:25
обход графа в ширину anemy Помощь студентам 0 20.11.2009 01:02
Обход графа в ширину. ZhooZhik Помощь студентам 1 06.04.2009 08:35
Обход графа в глубину coptor Общие вопросы Delphi 0 09.12.2008 22:50