poj1523——SPF
2010-12-22 20:09
423 查看
http://poj.org/problem?id=1523
这道题目是图论题目。个人采用暴力深搜解决。思路如下:
1.
首先采用邻接表的方法来存储图形信息。
2.
采用color数组作为标记,标记某一节点是否已经访问。
3.
从小到大遍历该图中的所有结点,判断该结点是否为SPF
4.
对于某一个节点是否为SPF,我的方法是:
去掉该结点,进行深搜,如果分支数为1,说明该结点非SPF。如果非1,说明该结点为对应分支数的SPF。
5.
需要注意输出SPF结点时,前面需要空两格,然后每个case输出一个空行。题目中的测试数据应该不大,不然不可能0ms通过。
这道题目是图论题目。个人采用暴力深搜解决。思路如下:
1.
首先采用邻接表的方法来存储图形信息。
2.
采用color数组作为标记,标记某一节点是否已经访问。
3.
从小到大遍历该图中的所有结点,判断该结点是否为SPF
4.
对于某一个节点是否为SPF,我的方法是:
去掉该结点,进行深搜,如果分支数为1,说明该结点非SPF。如果非1,说明该结点为对应分支数的SPF。
5.
需要注意输出SPF结点时,前面需要空两格,然后每个case输出一个空行。题目中的测试数据应该不大,不然不可能0ms通过。
#include <iostream> using namespace std; typedef struct node { int key; node *next; }node; node data[1001]; bool color[1001]; int maxnum; void input() { int a,b; while(scanf("%d",&a)!=EOF && a!=0) { if(a>maxnum) maxnum = a; scanf("%d",&b); if(b>maxnum) maxnum = b; node *n1 = new node(),*n2 = new node(); n1->key = a; n2->key = b; n1->next = data[b].next; n2->next = data[a].next; data[a].next = n2; data[b].next = n1; } } void init() { maxnum = 0; for(int i=0;i<1001;i++) { data[i].key = i; data[i].next = NULL; } } bool dfsVisit(int a,int j) { node* temp = data[j].next; if(data[j].key == a || color[j] || temp == NULL) return false; color[j] = true; while(temp != NULL) { dfsVisit(a,temp->key); temp = temp->next; } return true; } void clear() { for(int i=0;i<1001;i++) color[i] = false; } int dfs(int a) { clear(); int num = 0; for(int i=0;i<maxnum;i++) { if(dfsVisit(a,i+1)) num++; } return num; } //释放空间 void del() { for(int i=0;i<=maxnum;i++) { node *temp = data[i].next; while(temp != NULL) { data[i].next = temp->next; delete temp; temp = data[i].next; } } } int main() { int num = 1; init(); input(); while(maxnum!=0) { bool flag = false; cout<<"Network #"<<num<<endl; for(int i=0;i<maxnum;i++) { int result = dfs(i+1); if(result != 1) { cout<<" SPF node "<<i+1<<" leaves "<<result<<" subnets"<<endl; flag = true; } } if(!flag) cout<<" No SPF nodes"<<endl; cout<<endl; del(); init(); input(); num++; } return 0; }
相关文章推荐
- poj 1523 spf 求割点
- POJ 1523 SPF
- poj 1523 SPF
- POJ 1523 SPF 笔记
- POJ 1523 SPF(割点)
- POJ 1523 SPF 割边与割点
- poj 1523 SPF 求割点
- POJ-1523 SPF 割点
- poj 1523 SPF 无向图关节点
- SPF(poj 1523) 割点入门
- poj 1523 SPF(双连通分量割点模板)
- poj 1523 SPF
- POJ 1523 SPF (割点 && 点双连通分量)
- POJ 1523 SPF(Tarjan)
- poj 1523 SPF
- POJ 1523 SPF
- poj 1523 SPF 无向图关节点
- POJ 1523 SPF tarjan求割点模板
- POJ - 1523 SPF
- POJ 1523、ZOJ 1119 SPF - from lanshui_Yang