求一个图中的环的数目
来源:互联网 发布:授权系统 网站源码 编辑:程序博客网 时间:2024/06/05 18:31
该程序仅编写完成,没有调试过。结果只保存了形成环的路径,没有进行最终筛选。
第一步:先将图用matrix表示,如
1 2 3 4 5 6 7 8
matrix=[
1 0 1 1 1 0 0 0 0
2 1 0 1 0 0 0 0 0
3 1 1 0 1 0 0 0 0
4 1 0 1 0 1 0 0 0
5 0 0 0 1 0 1 1 1
6 0 0 0 0 1 0 1 1
7 0 0 0 0 1 1 0 1
8 0 0 0 0 1 1 1 0
]
第二步:定义变量:
typedef struct{
int data[MAX];
int length;
}Node;//节点的数据结构,节点编号按照0,1,2,3.。。
List<Node> *qNode;//用来存储中间的路径
List<Node> *cirNodes;//存储已经成环的路径
int **matrix;
第三步:定义几个重要的方法:
3.定义方法:
① void findNextPos(Node *currNode,int **m,int rows);
//对currNode->data[currNode->length]检查其下一个连通的节点(不等于currNode->data[currNode->length-1]);
//若存在此类点,则新建一个节点,拷贝原来的currNode,并在新节点newNode的第length+1个位置插入找到的点,并length++;否则,释放该节点。
//调用isAcircle(newNode);
//若是circle,则将节点放到cirNodes中,否则,放入qNode.
② bool isAcircle(Node *currNode);
//检查最后一个字符是否与前面的重复,若有,则表明是circle,
4.基本实现:
bool isNotVisited(int *table,int rows,int *curr){ int i; for(i=0;i<rows;i++){ if(table[i]==0){ curr=i; return true; } } return false; } bool isAcircle(Node *currNode){ if(currNode->length<2) return false; int depot=currNode->data[currNode->length-1]; int i; for(i=length-2;i>=0;i--){ if(currNode->data[i]==depot) return true; } return false; } Node* generateANode(Node *curr,int nextdepot){ Node * cloneNode =(Node*)malloc(sizeof(Node)); cloneNode->length=curr->length+1; int i; for(i=0;i<curr->length;i++){ cloneNode->data[i]=curr->data[i]; } cloneNode->data[i+1]=nextdepot; return cloneNode; } void findNextPos(Node *currNode,int **m,int rows){ int depot = currNode->data[currNode->length-1]; int lastDepot=-1; if((currNode->length)>1) lastDepot=currNode->data[currNode->length-2]; int i; for(i=0;i<rows;i++){ if(matrix[depot][i]==1){ if(lastDepot!=i){ Node *newNode=generateANode(currNode,i); if(isAcircle(newNode)){ cirNodes.push_back(newNode); } else qNode.push_back(newNode); } } }
- 求一个图中的环的数目
- HDU5483求一个图中的最小生成树不能去掉的边的数目
- 如何用java语言编写“求一个字符串中的的字母,数字,空格的数目。”
- 求一个字符串中的的字母,数字,空格以及其他类型的数目。
- 求分割的数目
- 求1的数目
- 求一个集合的子集,子集元素数目固定
- 求一个数被置为1的bit数目
- 求一个序列中逆序对的数目
- hdu 1241 Oil Deposits 搜索水题,等价于求一个图的连通分量的数目
- 求树的子树数目
- poj 2117 Electricity 【无向图求割点】【求去掉一个点后 图中最多的BCC数目】
- 树-----求叶子结点数目,结点数目,树的高度
- 求一个整型变量二进制数中含有1的数目(经典)
- 编程之美---求1的数目
- 编程之美---求1的数目
- 求两个年份之间闰年的数目
- 求二叉树的叶子节点数目
- Eclipse中配置Maven
- ExtJs4 笔记(7) Ext.tip.ToolTip 提示
- 用于启动 Windows Phone 8 内置应用的 URI 方案
- ExtJs4 笔记(8) Ext.slider 滚轴控件、 Ext.ProgressBar 进度条控件、 Ext.Editor 编辑控件
- protobuf的困局
- 求一个图中的环的数目
- 关于越界的问题
- Outing
- 客单价怎么算 影响客单价的主要因素有哪些?
- java中的json
- jQuery EasyUI validatebox 验证类型
- tar.xz文件如何解压
- Ibatis,Mybatis利用log4j将SQL语句打印在控制台
- 职场财富:人品永远是职场的“硬通货”